Doctrine,编辑 ManyToMany - 重载的间接修改 属性
Doctrine, editing ManyToMany - Indirect modification of overloaded property
假设我有这样的东西
class Menu extends \Kdyby\Doctrine\Entities\BaseEntity {
/**
* @ORM\ManyToMany(targetEntity="MenuItem", mappedBy="menus")
**/
protected $menuItems;
function __construct() {
$this->menuItems = new \Doctrine\Common\Collections\ArrayCollection();
}
}
还有这个
class MenuItem extends \Kdyby\Doctrine\Entities\BaseEntity {
/**
* @ORM\ManyToMany(targetEntity="Menu", inversedBy="menuItems")
* @ORM\JoinTable(name="cms_menuMenuItems")
*/
protected $menus;
public function __construct() {
$this->menus = new \Doctrine\Common\Collections\ArrayCollection();
}
现在当我想在代码中做这样的事情时
$menu->menuItems->add( $menuItem );
我收到关于 $menu->menuItems is not a Object 的错误(当我转储菜单时,它说 menuItems 属性 是一个 PersistendCollection)
当我转储 $menu->menuItems 时,我发现 $menuItems 属性 是一个数组。好的,那我要推进去了
$menu->menuItems[] = $menuItem;
但是没有任何反应,我开始关注 PHP 注意:
间接修饰重载属性
请记住,您将 $menuItems
声明为 protected
。要访问它,您应该创建一个 getter(如果您在 class 之外调用它,您没有指定,但我猜是):
public function getMenuItems() {
return $this->menuItems;
}
然后添加一个MenuItem:
$menu->getMenuItems()->add($item);
假设我有这样的东西
class Menu extends \Kdyby\Doctrine\Entities\BaseEntity {
/**
* @ORM\ManyToMany(targetEntity="MenuItem", mappedBy="menus")
**/
protected $menuItems;
function __construct() {
$this->menuItems = new \Doctrine\Common\Collections\ArrayCollection();
}
}
还有这个
class MenuItem extends \Kdyby\Doctrine\Entities\BaseEntity {
/**
* @ORM\ManyToMany(targetEntity="Menu", inversedBy="menuItems")
* @ORM\JoinTable(name="cms_menuMenuItems")
*/
protected $menus;
public function __construct() {
$this->menus = new \Doctrine\Common\Collections\ArrayCollection();
}
现在当我想在代码中做这样的事情时
$menu->menuItems->add( $menuItem );
我收到关于 $menu->menuItems is not a Object 的错误(当我转储菜单时,它说 menuItems 属性 是一个 PersistendCollection) 当我转储 $menu->menuItems 时,我发现 $menuItems 属性 是一个数组。好的,那我要推进去了
$menu->menuItems[] = $menuItem;
但是没有任何反应,我开始关注 PHP 注意: 间接修饰重载属性
请记住,您将 $menuItems
声明为 protected
。要访问它,您应该创建一个 getter(如果您在 class 之外调用它,您没有指定,但我猜是):
public function getMenuItems() {
return $this->menuItems;
}
然后添加一个MenuItem:
$menu->getMenuItems()->add($item);