Dav*_*vit 15 php doctrine symfony
我想从数据库中删除与Symfony2中特定user_id匹配的所有记录.
$em = $this->getDoctrine()->getManager();
$user_service = $em->getRepository('ProjectTestBundle:UserService')
->findByUser($this->getUser()->getId());
Run Code Online (Sandbox Code Playgroud)
这可能会返回一些匹配的对象,所以当我运行时:
$em->remove($user_service);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
发生错误:
EntityManager#remove() expects parameter 1 to be an entity object, array given.
Run Code Online (Sandbox Code Playgroud)
如何删除与特定条件匹配的所有记录(对象)?顺便说一下,当我在mysql中运行一个等效的sql语句时,它运行得很好.
Mar*_*der 27
你为什么不循环遍历对象数组?
$user_services = $em->getRepository('ProjectTestBundle:UserService')
->findByUser($this->getUser()->getId());
foreach ($user_services as $user_service) {
$em->remove($user_service);
}
$em->flush();
Run Code Online (Sandbox Code Playgroud)
小智 6
您还可以使用学说查询生成器delete
方法。
public function deleteAllByUser(UserInterface $user)
{
$query = $this->createQueryBuilder('related_entity')
->delete()
->andWhere('related_entity.user = :user')
->setParameter('user', $user)
->getQuery();
return $query->execute();
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用这样的东西:
$user_services = $em->getRepository('ProjectTestBundle:UserService')->findByUser($this->getUser()->getId());
array_walk($user_services, array($this, 'deleteEntity'), $em);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中添加这个方法:
protected function deleteEntity($entity, $key, $em)
{
$em->remove(entity);
}
Run Code Online (Sandbox Code Playgroud)
或者简单地使用:
$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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,当使用Propel
和 时PropelBundle
,PropelObjectCollection
会实现一个delete()
函数,因此您不必手动执行此循环。
归档时间: |
|
查看次数: |
22607 次 |
最近记录: |