2012-06-19 48 views
1

我想查询一个实体并且在一个继承映射结构中加入了另一个实体。学说和继承映射:在一个子实体上的关联

的情况是:

  • 我有一个父实体(如动物)
  • 我有一个孩子的实体(如狗)
  • 我有一个1的实体:1的关联孩子(狗屋)

我想查询所有的狗屋和学说,让我自己的狗主人也。

简单DQL查询我写的是:

SELECT o FROM MyBundle:DogHouse h JOIN h.dog d 

的错误是:

公告:未定义的索引:在 ../vendor/doctrine/lib/Doctrine/ORM/ ID Query/SqlWalker.php line 779,class:ErrorException

看着堆栈跟踪看来,该教条正试图加入对孩子的实体,而不是父

这里的ID是表示这种情况下,类

/** 
* Animal 
* 
* @ORM\Entity 
* @ORM\Table(name="animal") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="type", type="integer") 
* @ORM\DiscriminatorMap({"1"="cat", "2"="dog"}) 
*/ 
class Animal 
{ 
    /** 
    * @ORM\Column(name="animal_id", type="integer", nullable=false) 
    * @ORM\Id 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="name", type="string", length=200, nullable=false) 
    */ 
    protected $name; 

    /* getters, setters... */ 
} 

/** 
* Dog 
* 
* @ORM\Entity 
* @ORM\Table(name="dog") 
*/ 
class Dog extends Animal 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="DogHouse", inversedBy="dog") 
    */ 
    private $dogHouse; 

    /* getters, setters... */ 
} 


/** 
* Dog House 
* 
* @ORM\Table(name="dog_house") 
* @ORM\Entity 
*/ 
class DogHouse 
{ 
    /** 
    * @ORM\Column(name="dog_house_id", type="integer", nullable=false) 
    * @ORM\Id 
    */ 
    private $id; 

    /** 
    * @ORM\OneToOne(targetEntity="Dog", mappedBy="doghouse") 
    */ 
    private $dog; 

    /* getters, setters... */ 
} 

注: This post涉及完全相同的问题,并没有回答

回答

0

你的映射关系设置不正确...

Dog/Doghouse之间的一对一关系应如下所示。

class DogHouse.... 

/** 
* @ORM\OneToOne(targetEntity="Dog", mappedBy="doghouse") 
*/ 
private $dog; 

确保您的mappedBy =“狗窝”

+0

你说得对,我写一个例子,当出现了拼写错误。我将编辑原始帖子进行更正。但不幸的是问题仍然存在。感谢您的回答 – Simon

+0

好吧,我已经从零开始发现了。 ** Undefined index:id **消息引用了JoinColumn的referencedColumnName属性。简单的我错了。我搜索得太过分了,其实很简单。无论如何感谢您的帮助 – Simon

+1

如果此答案实际上不是您问题的正确答案,为什么不自己创建新答案,然后选择该答案? –