使用Doctrine DBAL一次删除多行,是否可能?

时间:2015-07-10 10:01:12

标签: php doctrine-orm silex dbal

首先,我只想提一下,这根本不是一个“问题”。使用Doctrine DBAL删除不是问题,我能够做到。

我真正想知道的是,如果有办法一次删除多行而不必循环,例如数组。

对于我的项目,我使用SilexDoctrine DBAL

以下是我目前如何做的示例:

$toDelete = array(1,2,3,4);

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

有没有办法避免循环?

2 个答案:

答案 0 :(得分:3)

您可以使用参数列表: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();

答案 1 :(得分:0)

不是没有编写自己的查询。

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