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,但我在几次测试后添加了它,当我在需要的文档中刷新时。不管我有没有瀑布,它都不起作用。