助けを求めてください。私は自分のアプリケーションで1対多のエンティティを実行しようとしています。私は教義の文書を読んでいます。私はMenuItemクラスを持っています。これは、ページテーブルとの関係が1対1であり、テーブルメニューとの関係が多対多です。私はツリーメニューを取得する必要がありますので、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;
}
}
私の投稿を編集していただきありがとうございます。それは3IDを持つ感覚を作るのですか?メインID、親ID、子ID – Anamesh
私はこのソリューションを使用していて、あなたが存在する場合、親menuItemと子メニューitemを得ることができる、1つのidと2つの外部キーを持つことができます。 –
今、このクラスによって教授マッピングエラーがあります。 - 関連付けAppBundle \ Entity \ MenuItem#childrenは、関連付けとして定義されていないフィールドとしてAppBundle \ Entity \ MenuItem#parentを所有するサイドフィールドを参照します。 - 関連付けAppBundle \ Entity \ MenuItem#childrenは、存在しない所有サイドフィールドAppBundle \ Entity \ MenuItem#parentを参照します。 – Anamesh