2

エンティティをクエリして、継承マッピング構造の子である他のエンティティに参加しようとしています。

状況は次のとおりです。

  • 親エンティティがあります(例:動物)
  • 子エンティティ(犬など)があります
  • 私は子供と1:1の関係を持つエンティティを持っています(犬小屋)

私はすべての犬小屋と教義を調べて、犬の飼い主も教えてもらいたいと思っています。

私が書いた簡単なDQLクエリは次のとおりです。

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

エラーは次のとおりです。

注意:未定義のインデックス:../ vendor / doctrine / lib / Doctrine / ORM / Query / SqlWalker.php行779のID、クラス: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... */
}

注: この投稿はまったく同じ問題に関連しており、回答されていません

4

1 に答える 1

0

マッピングが正しく設定されていません...

Dog/Doghouse間の1対1の関係は次のようになります。

class DogHouse....

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

あなたのmappedBy="doghouse"を確認してください

于 2012-06-19T15:50:37.753 に答える