我有一个表"节点",列id,parent_id等......
/**
* Node
*
* @ORM\Table(name="nodes", indexes={@ORM\Index(name="parent", columns={"parent_id"}), @ORM\Index(name="path", columns={"path"})})
* @ORM\Entity
*/
class Node
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="parent_id", type="integer", nullable=true)
*/
private $parentId;
...
}
现在我想构建父子关系(parent_id是同一个表的id的外键)。基于关系的symfony cookbook示例(http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations),我尝试创建它:
/**
* @ORM\OneToMany(targetEntity="Node", mappedBy="parent")
*/
protected $children;
/**
* @ORM\ManyToOne(targetEntity="Node", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
protected $parent;
public function __construct()
{
$this->children = new ArrayCollection();
}
我的第一个问题是,命令:
php app/console doctrine:generate:entities AppBundle
没有为父母和孩子创建getter和setter(没有错误消息,只是正常"生成..."消息)
所以我自己创造了吸气剂和制定者:
/**
* @return mixed
*/
public function getParent() {
return $this->parent;
}
/**
* @param mixed $parent
*/
public function setParent( $parent ) {
$this->parent = $parent;
}
/**
* @return mixed
*/
public function getChildren() {
return $this->children;
}
/**
* @param mixed $children
*/
public function setChildren( $children ) {
$this->children = $children;
}
但这似乎不起作用。我无法获取节点的父节点或子节点:
$node->getParent();
$node->getChildren();
两个命令都返回null,但数据是正确的。该代码甚至没有尝试查询父母或子女。
答案 0 :(得分:0)
确保您的课程定义如下:
/**
* @ORM\Entity()
*/
class Node
{
public function __construct()
{
$this->children= new ArrayCollection();
}
/**
* Set parent
*
* @param \Bundle\Entity\Node $parent
* @return Message
*/
public function setParent(\Bundle\Entity\Node $parent = null)
{
$this->parent = $parent;
return $this;
}
/**
* Get parent
*
* @return \Bundle\Entity\Node
*/
public function getParent()
{
return $this->parent;
}
/**
* Add children
*
* @param \Bundle\Entity\Node $children
* @return Message
*/
public function addReply(\Bundle\Entity\Node $children)
{
$this->children[] = $children;
return $this;
}
/**
* Remove children
*
* @param \Bundle\Entity\Node $children
*/
public function removeReply(\Bundle\Entity\Node $children)
{
$this->children->removeElement($children);
}
/**
* Get children
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getChildren()
{
return $this->children;
}
}
然后再次尝试实体生成命令。并且不要忘记更新架构。
答案 1 :(得分:0)
好的,我发现了为什么我有这个(愚蠢的)问题。由于我最初使用表(http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html)的逆向工程生成了我的实体,因此我在配置中使用了YML文件(自动生成的位置)。看来,如果你有这样的文件,symfony / doctrine会使用它们而不是注释。而已。我只是要删除它们。 捂脸