使用 Doctrine 2 和 Symfony 2.0。
我有两个 Doctrine 实体(假设 EntityA 和 EntityB)。
他们之间有多对多关系。这样数据库中就创建了一个EntityA_EntityB表。
使用 DQL 或 QueryBuilder,如何从该关系表 EntityA_EntityB 中删除?
Doctrine 提供了类似的东西来执行类似的操作:
->delete()
->from('EntityA a')
->where('a.id', '?', $id);
但我真的不知道如何从关系表中删除行。
$em = ...; // instance of `EntityManager`
// fetch both objects if ID is known
$a = $em->getRepository("YourProjectNamespace:EntityA")->find($id_of_A);
$b = $em->getRepository("YourProjectNamespace:EntityB")->find($id_of_B);
// suppose you have `EntityA::getObjectsOfTypeB` which retrieves all of linked objects of type `EntityB`.
// This method return instacne of ArrayCollection
$a->getObjectsOfTypeB()->removeElement($b);
$em->flush();
像这样的东西吗?
基本上,您需要从中删除相关对象collection
而不是删除关系本身。你想直接删除关系你总是可以使用 pureSQL
, 但在DQL
这是不可能的。
Raw DELETE SQL statement via DBAL Connection object
$conn = $this->getDoctrine()->getManager()->getConnection();
$stmt = $conn->prepare("DELETE FROM EntityAEntityB WHERE id_b IN (:ids_of_b)");
$stmt->bindParam('ids_of_b', $to_delete_ids); // BEWARE: this array has to have at least one element
$stmt->executeUpdate();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)