【发布时间】:2012-06-19 13:07:06
【问题描述】:
我正在尝试查询一个实体并加入另一个实体,该实体是继承映射结构中的子实体。
情况是:
- 我有一个父实体(例如动物)
- 我有一个子实体(例如 Dog)
- 我有一个与孩子 1:1 关联的实体(狗屋)
我想查询所有的狗屋和教义,让我也找到他们的狗主人。
我写的简单 DQL 查询是:
SELECT o FROM MyBundle:DogHouse h JOIN h.dog d
错误是:
注意:未定义的索引:id in ../vendor/doctrine/lib/Doctrine/ORM/Query/SqlWalker.php 第 779 行,类: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 涉及完全相同的问题,但没有得到回答
【问题讨论】:
标签: php doctrine-orm