使用 Doctrine DBAL 一次删除多行,有可能吗?
Deleting multiple rows at once with Doctrine DBAL, is it possible?
首先,我只想说这根本不是 "issue"。用 Doctrine DBAL 删除不是问题,我可以做到。
我真正想知道的是是否有办法一次删除多行而不必循环,例如数组。
对于我的项目,我使用 Silex and the Doctrine DBAL
这是我目前如何做的一个例子:
$toDelete = array(1,2,3,4);
foreach($toDelete as $id){
$this->app['db']->delete('table_name',array('id' => $id ));
}
有什么方法可以避免循环吗?
必须编写自己的查询。
$app["db"]
(假设默认 silex/doctrine 设置)是一个学说连接,因此您可以执行任何您想要的查询。
$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();
首先,我只想说这根本不是 "issue"。用 Doctrine DBAL 删除不是问题,我可以做到。
我真正想知道的是是否有办法一次删除多行而不必循环,例如数组。
对于我的项目,我使用 Silex and the Doctrine DBAL
这是我目前如何做的一个例子:
$toDelete = array(1,2,3,4);
foreach($toDelete as $id){
$this->app['db']->delete('table_name',array('id' => $id ));
}
有什么方法可以避免循环吗?
必须编写自己的查询。
$app["db"]
(假设默认 silex/doctrine 设置)是一个学说连接,因此您可以执行任何您想要的查询。
$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();