我有一个简单的递归类别表:
id
name
parent_id - is a link to id, NULL - for root categories
我需要用外键创建一个表。我的类没有创建这个键。如何使用"条令:模式:创建"将此类更改为使用外键创建表?我尝试过的:
<?php
namespace TestBackEndBundleEntity;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
* @ORMTable(name="category")
*/
class Category
{
/**
* @ORMId
* @ORMColumn(type="bigint", length=20)
* @ORMGeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @ORMColumn(type="string", length="255")
* @var string
*/
protected $name;
/**
* @ORMColumn(name="parent_id", type="bigint", length=20, nullable="true")
* @ORMOneToMany(targetEntity="Category")
* @ORMJoinColumn(name="id", onDelete="CASCADE", onUpdate="CASCADE")
* @var int
*/
protected $parentId;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
}
您用ManyToOne逆转了OneToMany!
请参见此处:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#one-到许多自参考
事实上,你希望多个子类别可以有一个父猫!
您需要什么:
/**
* @OneToMany(targetEntity="Category", mappedBy="parent")
*/
private $children;
/**
* @ManyToOne(targetEntity="Category", inversedBy="children")
* @JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;
// ...
public function __construct() {
$this->children = new DoctrineCommonCollectionsArrayCollection();
}
您可以将$parent替换为$parentId(将mappedBy="parent"替换为mappedBy="parentId"),但这不是一个好的编码约定^^