具有该实体外键的学说实体



我有一个简单的递归类别表:

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"),但这不是一个好的编码约定^^

相关内容

  • 没有找到相关文章

最新更新