具有该实体外键的学说实体
Posted
技术标签:
【中文标题】具有该实体外键的学说实体【英文标题】:doctrine entity with foreign key to this entity 【发布时间】:2012-09-04 11:21:04 【问题描述】:我有一个简单的递归类别表:
id
name
parent_id - is a link to id, NULL - for root categories
我需要用外键创建一个表。我的班级没有创建此密钥。如何更改此类以使用“doctrine:schema:create”创建具有外键的表?我尝试过的:
<?php
namespace Test\BackEndBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="category")
*/
class Category
/**
* @ORM\Id
* @ORM\Column(type="bigint", length=20)
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @ORM\Column(type="string", length="255")
* @var string
*/
protected $name;
/**
* @ORM\Column(name="parent_id", type="bigint", length=20, nullable="true")
* @ORM\OneToMany(targetEntity="Category")
* @ORM\JoinColumn(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;
【问题讨论】:
@Sybio,谢谢老板。查看我的更改。 【参考方案1】:你用 ManyToOne 反转了 OneToMany !
请看这里:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#one-to-many-self-referencing
实际上,您希望复数子类别可以有一只父猫!
你需要什么:
/**
* @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 \Doctrine\Common\Collections\ArrayCollection();
您可以将 $parent 替换为 $parentId(并将 mappedBy="parent" 替换为 mappedBy="parentId"),但这不是一个好的编码约定^^
【讨论】:
链接失效了..这里是更新的链接:doctrine-orm.readthedocs.org/en/latest/reference/…以上是关于具有该实体外键的学说实体的主要内容,如果未能解决你的问题,请参考以下文章