Intereting Posts
Проблемы с gzipped XML-файлами с curl PHP Компиляция латексного документа из PHP Как конвертировать HTML-код или данные, содержащие (тег изображения и некоторый текст) в изображение для загрузки как отправить содержимое узла в xml на другую страницу с помощью php? Нарисуйте вертикальную линию, представляющую текущую дату в диаграмме gant d3 PHP / MySQL – фильтр массивов для ботов fputcsv не записывает никаких данных в файл CSV Загрузить файл на amazon S3 с помощью PHP SDK Где я могу добавить вспомогательные функции Laravel 4, которые могут отображать флэш-сообщения? как показать все данные из таблицы joomla? PHP-интерком не работает после обновления композитора Как PHP обрабатывает переменные в ОЗУ? PHP strtotime +1 месяц добавление дополнительного месяца Как использовать KNPPaginatorBundle для разбивки на страницы с использованием репозитория Doctrine? htaccess rewriterule и directoryindex

Symfony2 & Doctine2: removeElement does'nt work

У меня есть небольшой проект в Symfony2 и доктрина, и я пытаюсь обновить 2 связанных объекта:

Участники и автомобили

$carMembers = $car->getMembers(); echo count($carMembers); // --> show 2 echo get_class(carMembers[0]); // --> show MyCars\WSBundle\Entity\Member $car->removeMember($member); $em->persist($car); $em->flush(); $carMembers= $car->getMembers(); echo count($carMembers); // --> show 1 echo get_class(carMembers[0]); // --> show MyCars\WSBundle\CarsController !!! 

есть мои Существа:

Автомобиль

 /** * @ORM\ManyToMany(targetEntity="Member", mappedBy="cars") */ private $members; /** * Remove Member * * @param MyCars\WSBundle\Entity\Member $member */ public function removeMember(\MyCars\WSBundle\Entity\Member $member) { $this->members->removeElement($member); $member->removeCar($this); } как /** * @ORM\ManyToMany(targetEntity="Member", mappedBy="cars") */ private $members; /** * Remove Member * * @param MyCars\WSBundle\Entity\Member $member */ public function removeMember(\MyCars\WSBundle\Entity\Member $member) { $this->members->removeElement($member); $member->removeCar($this); } 

член

 /** * @ORM\ManyToMany(targetEntity="Car", cascade={"persist"}) * @ORM\JoinTable(name="cars_membres", * joinColumns={@ORM\JoinColumn(name="member_id", referencedColumnName="member_id")}, * inverseJoinColumns={@ORM\JoinColumn(name="car_id", referencedColumnName="car_id")} * ) */ private $cars; 

Может ли кто-нибудь помочь?

Solutions Collecting From Web of "Symfony2 & Doctine2: removeElement does'nt work"

Не забудьте инициализировать ArrayCollection в конструкторе класса, если вы хотите использовать функции add , contains или removeElement

 <?php // ... use Doctrine\Common\Collections\ArrayCollection; class Car { /** * @MongoDB\Id */ protected $members; /** * General constructor */ public function __construct() { $this->members = new ArrayCollection(); } /** * @param Member $member * @return $this */ public function addMember(Member $member) { if (!$this->hasMember($member)) { $this->members->add($member); } return $this; } /** * @param Member $member * @return $this */ public function removeMember(Member $member) { if ($this->hasMember($member)) { $this->members->removeElement($member); } return $this; } /** * @return mixed */ public function getMembers() { return $this->tags; } /** * @param Member $member * @return mixed */ public function hasTag(Member $member) { return $this->members->contains($member); } } 

Я думаю, что вы ищете orphanRemoval отношения orphanRemoval .

 @ORM\ManyToMany(targetEntity="Car", cascade={"persist"}, orphanRemoval=true) 

Поэтому, когда вы удаляете элемент из диспетчера сущности коллекции и флеша, он удаляет запись отношения из базы данных …

Какую коллекцию вы используете? Вы используете \ Doctrine \ ArrayCollecion? Вы уверены, что вы удаляете один экземпляр объекта-члена? Метод removeElement () удаляет объект из коллекции только в том случае, если он является одним и тем же экземпляром.

вот этот метод (обратите внимание на последний параметр (true) в методе array_search:

 public function removeElement($element) { $key = array_search($element, $this->_elements, true); if ($key !== false) { unset($this->_elements[$key]); return true; } return false; } с public function removeElement($element) { $key = array_search($element, $this->_elements, true); if ($key !== false) { unset($this->_elements[$key]); return true; } return false; }