Doctrine和继承映射:子实体上的关联

时间:2012-06-19 13:07:06

标签: php doctrine-orm

我正在尝试查询实体并加入了一个继承映射结构中的子节点。

情况是:

  • 我有一个父实体(例如Animal)
  • 我有一个儿童实体(例如狗)
  • 我有一个与孩子(狗屋)有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

查看堆栈跟踪,似乎doctrine正在尝试与子实体上的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与完全相同的问题有关,但没有得到解答

1 个答案:

答案 0 :(得分:0)

您的映射设置不正确......

Dog / Doghouse之间的一对一关系应该如下..

class DogHouse....

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

确保您的mappedBy =“狗屋”