请求帮助。我试图在我的应用程序中执行一个到多个实体,我阅读了一个学说文档。我有我的MenuItem类,它与Page表有一对一的关系,与表菜单有很多关系。我必须得到一个树状菜单,所以MenuItem类有id(对我来说是孩子)和父,但是在更新模式之后它不起作用,我在数据库中的父字段仍然不是外键。这是我的MenuItem.php类代码:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* MenuItem
*
* @ORM\Table(name="menu_item")
* @ORM\Entity(repositoryClass="AppBundle\Repository\MenuItemRepository")
*/
class MenuItem
{
/**
* @var int
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\OneToMany(targetEntity="MenuItem", mappedBy="parentId")
*/
private $id;
/**
* @var string
* @ORM\Column(name="url", type="string", length=255, unique=true, nullable=true)
*/
private $url;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var int
* @ORM\Column(name="parent", type="integer", nullable=true)
* @ORM\ManyToOne(targetEntity="MenuItem", inversedBy="id")
* @ORM\JoinColumn(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;
}
/**
* @ORM\ManyToMany(targetEntity="Menu", mappedBy="menuitems")
*/
private $menus;
/**
* Constructor
*/
public function __construct()
{
$this->menus = new \Doctrine\Common\Collections\ArrayCollection();
$this->id = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add menu
*
* @param \AppBundle\Entity\Menu $menu
*
* @return MenuItem
*/
public function addMenu(\AppBundle\Entity\Menu $menu)
{
$this->menus[] = $menu;
return $this;
}
/**
* Remove menu
*
* @param \AppBundle\Entity\Menu $menu
*/
public function removeMenu(\AppBundle\Entity\Menu $menu)
{
$this->menus->removeElement($menu);
}
/**
* Get menus
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getMenus()
{
return $this->menus;
}
/**
* @ORM\OneToOne(targetEntity="Page")
*/
private $page;
/**
* Set page
*
* @param \AppBundle\Entity\Page $page
*
* @return MenuItem
*/
public function setPage(\AppBundle\Entity\Page $page = null)
{
$this->page = $page;
return $this;
}
/**
* Get page
*
* @return \AppBundle\Entity\Page
*/
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;
}
}
答案 0 :(得分:3)
尝试使用它:
/**
* @var int
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
//other fields
/**
* One MenuItem has Many MenuItems.
* @ORM\OneToMany(targetEntity="MenuItem", mappedBy="parent")
*/
private $children;
/**
* Many MenuItems have One MenuItem.
* @ORM\ManyToOne(targetEntity="MenuItem", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
*/
private $parent;
我删除了$ id字段中的关系,并添加了children
字段
答案 1 :(得分:0)
如果您在实体parent
和child
属性中找到了 - 请尝试教学GEDMO扩展。你可以在上找到更多
Official bundle page。
尝试使用doctrine树扩展 - 它为您提供完整的树映射。非常强大的功能!