我试图从Doctrine中删除带有删除查询的x对象。由于学说中没有LIMIT,我们应该使用$ query-> setMaxResults($ limit)来代替。我正在使用Symfony2。
但是它不能与以下查询一起使用(使用或不使用$ query-> setMaxResults($ limit),它会删除所有内容,而不是删除$ limit first entities)。
$limit = 10;
$query = $entityManager->createQuery(
'DELETE FROM MyProject\Bundle\MyBundle\Entity\MyEntity myEntity
WHERE myEntity.cost = 50'
)
$query->setMaxResults($limit);
$query->execute();
一个有效的解决方案是使用带有Doctrine的本机SQL(而不是DQL)。
$limit = 10;
$sql = 'DELETE FROM my_entity
WHERE cost = 50
LIMIT ' . $numberOfDeletion;
$stmt = $entityManager->getConnection()->prepare($sql);
$stmt->execute();