У меня однонаправленные многие ко многим ассоциации между бейджами и запросом следующим образом:как удалить однонаправленные многие ко многим ассоциации с доктриной 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={"persist"}). 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);
}
Можете ли вы показать реализацию вашего Значки # removeInvite метод? Или это автоматически создается Doctrine? –
Thank Roel, Это автоматически генерируется доктриной 2, но позвольте мне привести это вверх –
Я не могу воспроизвести это в Doctrine ORM v2.4.5. Какую версию Doctrine ORM вы используете? –