是否可以使用 Doctrine QueryBuilder 构建 INSERT INTO SELECT 查询?
Posted
技术标签:
【中文标题】是否可以使用 Doctrine QueryBuilder 构建 INSERT INTO SELECT 查询?【英文标题】:Is it possible to build INSERT INTO SELECT query with Doctrine QueryBuilder? 【发布时间】:2016-06-25 16:57:30 【问题描述】:我有一些条件,需要使用该条件创建基于 SELECT 的 INSERT 查询。
查询应该是这样的:
INSERT INTO mytable (field1, field2)
SELECT f1, f2
FROM mytable2
JOIN mytable3 ON mytable3.field3 = mytable2.field2
WHERE mytable3.somefield = 'somevalue'
编辑:
我知道如何构建 INSERT INTO VALUES 查询。但是我在 Criteria 对象中有 SELECT 的条件,我需要使用它们来构建 INSERT。
我需要这样的东西
public function myInsert(Criteria $criteria)
$qb = new QueryBuilder;
$qb->insert('mytable')
->values('field1, field2') // Is it possible
->select('f1, f2') // somthing like this?
->from('mytable2')
->innerJoin('mytable2', 'mytable3', 'mytable3',
'mytable3.field3 = mytable2.field2')
->where($criteria);
$qb->execute();
【问题讨论】:
Symfony2 (doctrine2) native sql insert的可能重复 不重复。我知道如何构建 INSERT INTO VALUES 查询,但是如何构建 INSERT INTO SELECT 查询? @mnv DQL 是非常严格的东西,它只是试图用编程语言的对象模型来做事情,它不能像 sql 一样查询。我不确定你为什么需要?您还可以使用学说查询本机 sql。你能解释一下你为什么需要吗?我们可以通过其他方式提供帮助。 我有带有过滤器的页面。用户可以选择一些东西并显示结果。可能有很多行。带分页。用户可以点击按钮根据过滤器在其他表中创建记录。作为替代方案,我可以使用 QueryBuilder 创建选择查询并选择 nedded 行。并在循环中插入每条记录。但就性能而言,这是个坏主意。 【参考方案1】:我认为你必须建立自己的陈述。应该是这样的。
$sql ="INSERT INTO mytable (field1, field2)
SELECT f1, f2
FROM mytable2
JOIN mytable3 ON mytable3.field3 = mytable2.field2
WHERE mytable3.somefield = 'somevalue'";
/** @var Connection $connection */
$connection = GeneralUtility::makeInstance(ConnectionPool::class)
->getConnectionForTable(self::TABLENAME);
/** @var DriverStatement $statement */
$statement = $connection->prepare($sql);
$statement->execute();
【讨论】:
以上是关于是否可以使用 Doctrine QueryBuilder 构建 INSERT INTO SELECT 查询?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Doctrine 2 ODM 中的多个字段上使用 sort()?
是否可以在 Doctrine 2 ODM 中的多个字段上使用 sort()?
是否可以使用 Doctrine QueryBuilder 构建 INSERT INTO SELECT 查询?