4

我觉得我有一段时间在这里遗漏了一些小东西;我在 Dotrine DBAL 2.2.x / 2.3.xinsert()上使用组件上的方法时遇到问题。QueryBuilder

我做了一些调查,这是来自 DBAL 文档的QueryBuilder 页面的片段

\Doctrine\DBAL\Query\QueryBuilder 支持构建 SELECT、INSERT、UPDATE 和 DELETE 查询。您正在构建哪种查询取决于您使用的方法。

它继续解释代码示例,这样我就可以简单地做:

$builder = $connection->createQueryBuilder();
$result = $builder
    ->insert('table_name')
    // ...

插入模式下使用查询生成器。除非我这样做了,否则我会从 PHP 那里收到投诉:

致命错误:调用未定义的方法 Doctrine\DBAL\Query\QueryBuilder::insert()

进一步检查QueryBuilder.php 源代码

我没有看到对任何方法的引用insert(...),没有可以继承它的类,没有添加到QueryBuilder可以暴露插入机制的特征。此外,我在顶部看到了这个:

/* The query types. */
const SELECT = 0;
const DELETE = 1;
const UPDATE = 2;

没有插入查询类型;然而,有这个有趣的方法评论execute()

/**
 * Execute this query using the bound parameters and their types.
 *
 * Uses {@see Connection::executeQuery} for select statements and {@see Connection::executeUpdate}
 * for insert, update and delete statements.
 *
 * @return mixed
 */

底线:

这是一个拥有 100 名维护人员的大型项目,我更有可能在这里发现我的解释可疑,而不是在众多版本中如此基本的东西上搞砸了,但我终其一生都无法弄清楚我错过了什么。请帮我看看显而易见的。

4

1 回答 1

4

这取决于你的版本。自 v2.5.0-BETA3 起添加了插入功能。

https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Query/QueryBuilder.php#L563 并提交

您可以决定更新软件包版本或检查此替代解决方案

于 2014-08-22T07:17:40.170 回答