2014-10-08 3 views
2

У меня однонаправленные многие ко многим ассоциации между бейджами и запросом следующим образом:как удалить однонаправленные многие ко многим ассоциации с доктриной 2

бейджами:

<?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; 

} 

Ничего особенного в сущности запроса с момента это простая однонаправленная связь

Добавление ассоциации в порядке.

Но при удалении ассоциации я делаю это:

$em = $this->CI->doctrine->em; 

    //Get badges for new notifs 
    $badges = $user->getBadges(); 

    if($badges) 
    { 
     $invites = $badges->getInvite(); 
     if ($invites) 
     { 
      foreach ($invites as $key => $invite) 
      { 
       $badges->removeInvite($invite); 
      } 
     } 

     $em->persist($badges); 
     $em->flush(); 
    } 
    else 
    { 
     return false; 
    } 

Но это не работает, и довести это сообщение об ошибке для каждого пригласить Я пытаюсь отделить от Badge:

PHP-ошибка была обнаружена

Серьезность: Обратите внимание

сообщения: Не определен в Декс: 000000005ede1b52000000009e09e897

Имя файла: ORM/UnitOfWork.php

Номер

Line: 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; 
        } 
       } 
      } 

я получаю:

<b>Fatal error</b>: Uncaught exception 'Doctrine\ORM\ORMInvalidArgumentException' with message 'A new entity was found through the relationship 'Entity\Badges#invite' that was not configured to cascade persist operations for entity: Entity\[email protected] To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={&quot;persist&quot;}). If you cannot find out which entity causes the problem implement 'Entity\Request#__toString()' to get a clue.' in /var/www/meetmyfriends-dev/application/libraries/Doctrine/ORM/ORMInvalidArgumentException.php:59

Обратите внимание, что я сохранялся запрос, как указано в этом сообщении об ошибке (Entity \ Badges # invite - Entity \ Request)

Почему это происходит? Что мне делать, чтобы исправить это? Я просто хочу отключить приглашение от значков, чтобы удалить их в ассоциацию.

Благодаря

EDIT: Это реализация Нашивки # removeInvite Метод & Значки # 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); 
    } 
+0

Можете ли вы показать реализацию вашего Значки # removeInvite метод? Или это автоматически создается Doctrine? –

+0

Thank Roel, Это автоматически генерируется доктриной 2, но позвольте мне привести это вверх –

+0

Я не могу воспроизвести это в Doctrine ORM v2.4.5. Какую версию Doctrine ORM вы используете? –

ответ

0

Попробуйте это:

foreach ($invites as $key => $invite) 
      { 
       if(!empty($invite)){ 
        $badges->removeInvite($invite); 
       } 
      } 
+0

Не работает, к сожалению:/ –

+0

Удалите cascade = {"persist"} и проверьте его один раз. –

+0

Спасибо Nilesh, но я добавил после нескольких тестов, когда я был красным в документах, это было необходимо. Это не работает, или нет. Каскад сохраняется. –

Смежные вопросы