Doctrine DBAL是否支持一次性删除多行数据?

5
首先,我想提到的是这并不是一个“问题”。使用Doctrine DBAL删除不是问题,我能够做到。
实际上,我想知道是否有一种方法可以一次性删除多行,而不必遍历例如数组。
对于我的项目,我使用SilexDoctrine DBAL
下面是我目前的做法的示例:
$toDelete = array(1,2,3,4);

foreach($toDelete as $id){
   $this->app['db']->delete('table_name',array('id' => $id ));
}

有什么方法可以避免循环吗?

可能这会有所帮助:http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html#bulk-deletes - iVenGO
1
DBAL支持使用ID数组的WHERE id IN(?)查询:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#list-of-parameters-conversion - Cerad
2个回答

9
你可以使用参数列表:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#list-of-parameters-conversion
$connection->executeQuery('DELETE FROM table_name WHERE id IN (?)',
    array(array(1,2,3,4)),
    array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
);

或者使用查询构造器:

$builder = $connection->createQueryBuilder()
    ->delete('table_name')
    ->where('id in (:ids)')
    ->setParameter(':ids', array(array(1,2,3,4)), Connection::PARAM_INT_ARRAY);
$builder->execute();

Expected 1 arguments. Found 0. at createQueryBuilder() - Anton Duzenko

1

如果不编写自己的查询,是无法实现的。

$app["db"](假设使用默认的silex/doctrine设置)是一个doctrine连接,因此您可以执行任何想要的查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接