1

マッピングされたカテゴリ テーブルは次のようになります。

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")

しかし、なぜ?私の本番テーブルでは、列名が変更される場合があります

4

2 に答える 2

0

@ORM\Columnのようなリレーションも定義している場合は、アノテーションを使用しないでください@ORM\ManyToOne

その場合、列の名前は自動的に計算されるか、(既に行ったように)@ORM\JoinColumn(...)注釈でオーバーライドできます。

于 2018-05-14T09:52:53.500 に答える