使用 Doctrine DBAL 一次删除多行,可以吗?

Posted

技术标签:

【中文标题】使用 Doctrine DBAL 一次删除多行,可以吗?【英文标题】:Deleting multiple rows at once with Doctrine DBAL, is it possible? 【发布时间】:2015-09-29 00:55:21 【问题描述】:

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

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

对于我的项目,我使用 Silex 和 Doctrine DBAL

以下是我目前的做法示例:

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

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

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

【问题讨论】:

这可能有帮助:doctrine-orm.readthedocs.org/en/latest/reference/… DBAL 支持带有 id 数组的 WHERE id IN(?):docs.doctrine-project.org/projects/doctrine-dbal/en/latest/… 【参考方案1】:

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

【讨论】:

【参考方案2】:

不用自己写查询。

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

【讨论】:

以上是关于使用 Doctrine DBAL 一次删除多行,可以吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Doctrine DBAL?

composer安装doctrine/dbal

使用 Doctrine/DBAL 迁移数据库时如何修复未知数据库错误?

使用 insert() 方法通过 PHP Doctrine\DBAL 2 插入 DateTime 值

在 Symfony 中使用 Doctrine 的 DBAL 检索布尔值

Doctrine/dbal - 尝试将字符串字段更改为日期时出错