マッピングされたカテゴリ テーブルは次のようになります。
id | parent_id | name
そしてエンティティクラス:
class Category
{
/**
* @ORM\Id
*/
protected $id;
/**
* @ORM\Column(name="parent_id", type="integer") <-- if removed it works
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
protected $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
*/
protected $children;
/**
* @ORM\Column(name="name", type="string")
*/
protected $name;
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
public function __construct()
{
$this->products = new ArrayCollection();
$this->children = new ArrayCollection();
}
}
Symfony プロファイラーでは、次のマッピング エラーが発生します。
関連付け Test\TestBundle\Entity\Category#children は、関連付けとして定義されていない所有側フィールド Test\TestBundle\Entity\Category#parent を参照します。
関連 Test\TestBundle\Entity\Category#children は、存在しない所有側フィールド Test\TestBundle\Entity\Category#parent を参照します。
また、エラー通知:
Notice: Undefined index: parent in C:\inetpub\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 1575
なんで?私のクラスは、基本的にマニュアルからのコピー/貼り付けです。
編集:
列名の注釈を削除した後、それは機能します(名前はデフォルトで列名になります):
* @ORM\Column(name="parent_id", type="integer")
しかし、なぜ?私の本番テーブルでは、列名が変更される場合があります