У меня есть сущность Packages (manyToMany с entityTypeUser, который создает меня в БД сущность package_des_users). Таким образом, сущность My Packages содержит массив TypeUser (поскольку пакет может быть назначен нескольким типам пользователей).
Я хочу иметь возможность удалить один из элементов, которые являются частью массива TypeUser одного из моих пакетов.
Мой план действий был:
- Получить пакет для обработки
- Получите имя TypeUser для удаления из массива TypeUser пакета.
- Выполните проверку: если пакет содержит только одного пользователя типа, пакет будет удален напрямую. Если он содержит более одного, просто удалите выбранного пользователя типа.
На данный момент мне удалось восстановить обрабатываемый пакет, а также имя удаляемого TypeUser и номер TypeUser, который содержал мой пакет. Если он содержит только один, он хорошо его подавляет. Проблема остается для другого случая.
Будучи новичком в Symfony 3.4, мне трудно понять, как это сделать правильно.
Моя функция controller.php:
/**
* Deletes a paquet entity.
*
* @Route("/{id}/{type}/delete", name="paquets_delete")
*/
public function deleteAction(Request $request, $id, $type)
{
$em = $this->getDoctrine()->getManager();
$unPaquet = $em->getRepository('PagesBundle:Paquet')->find($id);
$nbTypes = count($unPaquet->getTypeUser());
if($nbTypes == 1)
{
$em->remove($unPaquet);
}
else
{
$am = $this->getDoctrine()->getManager();
$leType = $am->getRepository('PagesBundle:TypeUser')
->findByTypeUtilisateur($type);
$em->$unPaquet->deleteTypeFromTypesUser($leType);
}
$em->flush();
return $this->redirectToRoute('paquets_index');
Функция моего объекта (paquet):
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\ManyToMany(targetEntity="TypeUser")
* @ORM\JoinTable(name="Packages_des_TypesUser")
* @ORM\JoinColumn(nullable=false)
*/
private $typeUser;
public function __construct()
{
$this->typeUser = new ArrayCollection();
}
/**
* Get TypeUser
*
* @return Site\PagesBundle\Entity\TypeUser
*/
public function getTypeUser()
{
return $this->typeUser;
}
public function deleteTypeFromTypesUser(TypeUser $type)
{
$this->typeUser->removeElement($type);
}
Поэтому я хотел бы иметь возможность получить соответствующий объект TypeUser (результат является уникальным) из контроллера, чтобы я мог передать его в качестве параметра функции, которая позаботится об удалении его из массива TypeUser моего пакет. Затем это переводится в базу данных.
Спасибо за вашу помощь!