教义,编辑 ManyToMany - 重载属性的间接修改

Posted

技术标签:

【中文标题】教义,编辑 ManyToMany - 重载属性的间接修改【英文标题】:Doctrine, editing ManyToMany - Indirect modification of overloaded property 【发布时间】:2015-03-09 14:41:15 【问题描述】:

假设我有这样的东西

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 不是对象的错误(当我转储菜​​单时,它说 menuItems 属性是 PersistendCollection) 当我转储 $menu->menuItems 时,我发现 $menuItems 属性是一个数组。好的,那我想推进去

$menu->menuItems[] = $menuItem;

但没有任何反应,我收到以下 php 通知: 间接修改重载属性

【问题讨论】:

【参考方案1】:

请记住,您将 $menuItems 声明为 protected。要访问它,您应该创建一个 getter(如果您在类之外调用它,您没有指定,但我猜它):

public function getMenuItems() 
    return $this->menuItems;

然后添加一个MenuItem:

$menu->getMenuItems()->add($item);

【讨论】:

以上是关于教义,编辑 ManyToMany - 重载属性的间接修改的主要内容,如果未能解决你的问题,请参考以下文章

教义加入多对多没有关联

坚持时的教义关联完整性约束

从教义中的多对多自引用实体中获取孩子

如何使用 symfony 在教义查询构建器中选择表之间的特定连接?

Doctrine ManyToMany 自引用双向 - 父级未更新

教义:延迟加载属性