Symfony2 Doctrine удаляет массив объектов
Я хотел бы удалить все записи из базы данных, соответствующие определенному user_id в Symfony2.
$em = $this->getDoctrine()->getManager();
$user_service = $em->getRepository('ProjectTestBundle:UserService')
->findByUser($this->getUser()->getId());
Это может вернуть несколько подходящих объектов, поэтому при запуске:
$em->remove($user_service);
$em->flush();
возникает ошибка:
EntityManager#remove() expects parameter 1 to be an entity object, array given.
Как удалить все записи (объекты), соответствующие определенному условию?
Btw, когда я запускаю эквивалентный SQL-оператор в mysql, он отлично работает.
Ответы
Ответ 1
Почему бы вам просто не пропустить массив объектов?
$user_services = $em->getRepository('ProjectTestBundle:UserService')
->findByUser($this->getUser()->getId());
foreach ($user_services as $user_service) {
$em->remove($user_service);
}
$em->flush();
Ответ 2
Вы также можете использовать что-то вроде этого:
$user_services = $em->getRepository('ProjectTestBundle:UserService')->findByUser($this->getUser()->getId());
array_walk($user_services, array($this, 'deleteEntity'), $em);
$em->flush();
Затем добавьте этот метод в свой контроллер:
protected function deleteEntity($entity, $key, $em)
{
$em->remove(entity);
}
Или просто используйте:
$user_services = $em->getRepository('ProjectTestBundle:UserService')->findByUser($this->getUser()->getId());
$this->deleteEntities($em, $user_services);
$em->flush();
...
protected function deleteEntities($em, $entities)
{
foreach ($entities as $entity) {
$em->remove($entity);
}
}
Обратите внимание, что при использовании Propel
и PropelBundle
PropelObjectCollection
реализует функцию delete()
, поэтому вам не нужно делать этот цикл вручную.
Ответ 3
Если вы возвращаете один объект, вам просто нужно написать:
->findOneByUser,
Вам не нужен цикл foreach. Если ваше возвращение является массивом, вам нужно сделать ->findByUser
и написать цикл for:
foreach ($entities as $entity)
{
//do something
}