2012-06-19 85 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

如果此答案實際上不是您問題的正確答案,爲什麼不自己創建新答案,然後選擇該答案? –