用Doctrine DBAL一次删除多行,有可能吗?

问题描述:

首先,我只想提一下,这根本不是一个“问题”。用Doctrine DBAL删除不是问题,我可以做到这一点。用Doctrine DBAL一次删除多行,有可能吗?

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

对于项目中,我使用SilexDoctrine DBAL

这里去一个例子,我现在要做的事:

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

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

有没有方法来避免循环?

+0

或许这有助于:http://doctrine-orm.readthedocs.org/en/latest/ reference/batch-processing.html#bulk-deletes – iVenGO

+1

DBAL支持WHERE id IN(?)和一个ID数组:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/数据检索和-manipulation.html#列表的参数转换 – Cerad

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

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

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