Php 如何消除与条令2的单向多对多关联
我在徽章和请求之间有单向多对多关联,如下所示: 徽章:Php 如何消除与条令2的单向多对多关联,php,symfony,orm,doctrine-orm,doctrine,Php,Symfony,Orm,Doctrine Orm,Doctrine,我在徽章和请求之间有单向多对多关联,如下所示: 徽章: <?php namespace Entity; use Doctrine\ORM\Mapping as ORM; /** * Device * * @ORM\Table(name="badges") * @ORM\Entity */ class Badges { /** * Unidirectional - Many users have Many favorite comments (OWNING
<?php
namespace Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Device
*
* @ORM\Table(name="badges")
* @ORM\Entity
*/
class Badges
{
/**
* Unidirectional - Many users have Many favorite comments (OWNING SIDE)
*
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Entity\Request", cascade={"persist"})
*/
private $invite;
}
但它不起作用,我试图从Badge中分离的每个邀请都会显示以下错误消息:
$invites = $badges->getInvite();
if ( $invites )
{
foreach ( $invites as $key => $invite )
{
if( !empty( $invite ) ) {
$badges->removeInvite( $invite );
$em->persist( $invite );
$em->persist( $badges );
break;
}
}
}
遇到一个PHP错误
严重性:注意消息:未定义索引:
00000000 5EDE1B5200000009E09E897文件名:
ORM/UnitOfWork.php行号:2739
遇到一个PHP错误
严重性:警告消息:array_pop()需要参数1
要成为数组,请指定null文件名:
Persisters/ManyToManyPersister.php行号:143
现在,如果我只从Badge中删除一个请求:
$invites = $badges->getInvite();
if ( $invites )
{
foreach ( $invites as $key => $invite )
{
if( !empty( $invite ) ) {
$badges->removeInvite( $invite );
$em->persist( $invite );
$em->persist( $badges );
break;
}
}
}
我得到:
致命错误:未捕获异常“条令\ORM\ORMInvalidArgumentException”,消息“通过关系“entity\Badges\invite”找到了一个新实体,该关系未配置为级联实体:entity的持久化操作\Request@000000007c08aa8800000000c42081b4. 要解决此问题,请对此未知实体显式调用EntityManager#persist(),或在映射中配置cascade persist此关联,例如@manytone(..,cascade={“persist”})。如果您无法找到导致问题的实体,请在/var/www/meetmyfriends dev/application/libraries/Doctrine/ORM/ORMInvalidArgumentException.php:59中实现“entity\Request\uuuu toString()”以获取线索
请注意,我保留了此错误消息中指定的请求(Entity\Badges#invite是一个Entity\Request)
为什么会这样?
我该怎么做才能修好它?我只想将邀请从徽章中分离出来,以删除到关联
谢谢
编辑:
这是Badges#removeInvite方法和Badges#addInvite方法的实现:
/**
* Add invite
*
* @param \Entity\Request $invite
* @return Badges
*/
public function addInvite(\Entity\Request $invite)
{
$this->invite[] = $invite;
return $this;
}
/**
* Remove invite
*
* @param \Entity\Request $invite
*/
public function removeInvite(\Entity\Request $invite)
{
$this->invite->removeElement($invite);
}
试试这个:
foreach ( $invites as $key => $invite )
{
if(!empty($invite)){
$badges->removeInvite( $invite );
}
}
你能展示一下你的徽章移除方法的实现吗?或者这是由条令自动创建的?感谢Roel,这是由条令2自动生成的,但让我指出upI无法在条令ORM v2.4.5中复制这一点。你使用的是什么版本的ORM?它已经有几个月了,我会很惊讶这个问题是由一个内部错误引起的。这似乎是一个基本的功能。可能是来自实体请求或徽章本身?如果你想进一步挖掘,我很乐意给你发代码。很多感谢我建议你先尝试更新,看看这是否能解决问题。删除cascade={“persist”}并检查一次。感谢Nilesh,但我在几次测试后添加了它,当我在需要的文档中刷新时。不管我有没有瀑布,它都不起作用。