教义一对多自我引用不起作用



请帮忙。我正在尝试在我的应用程序中做一对多实体,我阅读了教义文档。我有我的 MenuItem 类,它与页表有一对一的关系,与表菜单有多对多的关系。我必须得到一个树菜单,所以 MenuItem 类有 id(对我来说是子级(和父级,但在更新架构后它不起作用,我在数据库中的父字段仍然不是外键。这是我的 MenuItem.php类代码:

<?php
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
/**
* MenuItem
*
* @ORMTable(name="menu_item")
* @ORMEntity(repositoryClass="AppBundleRepositoryMenuItemRepository")
*/
class MenuItem
{
/**
* @var int
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMOneToMany(targetEntity="MenuItem", mappedBy="parentId")
*/
private $id;
/**
* @var string
* @ORMColumn(name="url", type="string", length=255, unique=true, nullable=true)
*/
private $url;
/**
* @var string
*
* @ORMColumn(name="name", type="string", length=255)
*/
private $name;
/**
* @var int
* @ORMColumn(name="parent", type="integer", nullable=true)
* @ORMManyToOne(targetEntity="MenuItem", inversedBy="id")
* @ORMJoinColumn(name="parent", referencedColumnName="id")
*/
private $parentId;
/**
* Set url
*
* @param string $url
*
* @return MenuItem
*/
public function setUrl($url)
{
$this->url = $url;
return $this;
}
/**
* Get url
*
* @return string
*/
public function getUrl()
{
return $this->url;
}
/**
* Set name
*
* @param string $name
*
* @return MenuItem
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @ORMManyToMany(targetEntity="Menu", mappedBy="menuitems")
*/
private $menus;
/**
* Constructor
*/
public function __construct()
{
$this->menus = new DoctrineCommonCollectionsArrayCollection();
$this->id = new DoctrineCommonCollectionsArrayCollection();
}
/**
* Add menu
*
* @param AppBundleEntityMenu $menu
*
* @return MenuItem
*/
public function addMenu(AppBundleEntityMenu $menu)
{
$this->menus[] = $menu;
return $this;
}
/**
* Remove menu
*
* @param AppBundleEntityMenu $menu
*/
public function removeMenu(AppBundleEntityMenu $menu)
{
$this->menus->removeElement($menu);
}
/**
* Get menus
*
* @return DoctrineCommonCollectionsCollection
*/
public function getMenus()
{
return $this->menus;
}
/**
* @ORMOneToOne(targetEntity="Page")
*/
private $page;
/**
* Set page
*
* @param AppBundleEntityPage $page
*
* @return MenuItem
*/
public function setPage(AppBundleEntityPage $page = null)
{
$this->page = $page;
return $this;
}
/**
* Get page
*
* @return AppBundleEntityPage
*/
public function getPage()
{
return $this->page;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set parent
*
* @param integer $parent
*
* @return MenuItem
*/
public function setParentId($parentId)
{
$this->parentId = $parentId;
return $this;
}
/**
* Get parent
*
* @return integer
*/
public function getParentId()
{
return $this->parentId;
}
}

尝试使用它:

/**
* @var int
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
//other fields
/**
* One MenuItem has Many MenuItems.
* @ORMOneToMany(targetEntity="MenuItem", mappedBy="parent")
*/
private $children;
/**
* Many MenuItems have One MenuItem.
* @ORMManyToOne(targetEntity="MenuItem", inversedBy="children")
* @ORMJoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
*/
private $parent;

我已经删除了字段中$id关系并添加了children字段

如果你在你的实体中找到parentchild属性 - 是时候尝试学说GEDMO扩展了。您可以在 官方捆绑包页面。 尝试原则树扩展 - 它为您的树提供了完整的映射。非常强大的功能!

最新更新