在 Phalcon Framework 中使用不存在的 Phql
Using not exists with Phql in Phalcon Framework
我正在尝试使用 phql 编写一个简短的查询。我从一个 table 中选择所有内容,并且有一个 where 子句声明另一个 table 不能有连接到这个 table 的记录。这是原始 sql 查询,当 运行 对我的数据库 Mysql.
时工作正常
select * from application a
where not exists (select distinct 1 from preapproval p where p.application_id = a.id)
所以为了尝试在 phql 中写这篇文章,我一直在尝试不同的东西,但这是我最终得到的。
注意:如果我 运行 这没有 where 子句它起作用,从 'application' table.
中选择所有记录
$manager = \Phalcon\DI::getDefault()->getShared("modelsManager");
$data = $manager
->createBuilder()
->from(['a' => '\Models\Application'])
->where('not exists (select distinct 1 from [\Models\Preapproval] where [\Models\Preapproval].application_id = a.id)')
->getQuery()
->execute();
抛出的异常是:
Syntax error, unexpected token SELECT, near to ' distinct 1 from [\Models\Preapproval] where [\Models\Preapproval].application_id = a.id)', when parsing: SELECT [a].* FROM [\Models\Application] AS [a] WHERE not exists (select distinct 1 from [\Models\Preapproval] where [\Models\Preapproval].application_id = a.id) (190)
接下来的问题是,如何在 phql 中编写 where not exists 子句?
不幸的是,Phalcon 并不总是能够使用 PhQL 查询生成器解析复杂的查询。
但是在这种特殊情况下,您可以使用以下条件执行 leftJoin:
/** @var ModelManager $manager */
$manager = \Phalcon\DI::getDefault()->getShared("modelsManager");
$data = $manager->createBuilder()
->columns('\Models\Application.*')
->from('\Models\Application')
->leftJoin('\Models\Preapproval', '\Models\Preapproval.application_id = \Models\Application.id')
->andWhere('\Models\Preapproval.id IS NULL')
->getQuery()
->execute();
这可能会对性能产生负面或正面影响,具体取决于您的数据库索引基数。
我遇到了类似的问题。您可以使用 raw sql, left joins (in my case i had to use many 'join ON' conditions) or you can try this
我正在尝试使用 phql 编写一个简短的查询。我从一个 table 中选择所有内容,并且有一个 where 子句声明另一个 table 不能有连接到这个 table 的记录。这是原始 sql 查询,当 运行 对我的数据库 Mysql.
时工作正常select * from application a
where not exists (select distinct 1 from preapproval p where p.application_id = a.id)
所以为了尝试在 phql 中写这篇文章,我一直在尝试不同的东西,但这是我最终得到的。
注意:如果我 运行 这没有 where 子句它起作用,从 'application' table.
中选择所有记录$manager = \Phalcon\DI::getDefault()->getShared("modelsManager");
$data = $manager
->createBuilder()
->from(['a' => '\Models\Application'])
->where('not exists (select distinct 1 from [\Models\Preapproval] where [\Models\Preapproval].application_id = a.id)')
->getQuery()
->execute();
抛出的异常是:
Syntax error, unexpected token SELECT, near to ' distinct 1 from [\Models\Preapproval] where [\Models\Preapproval].application_id = a.id)', when parsing: SELECT [a].* FROM [\Models\Application] AS [a] WHERE not exists (select distinct 1 from [\Models\Preapproval] where [\Models\Preapproval].application_id = a.id) (190)
接下来的问题是,如何在 phql 中编写 where not exists 子句?
不幸的是,Phalcon 并不总是能够使用 PhQL 查询生成器解析复杂的查询。
但是在这种特殊情况下,您可以使用以下条件执行 leftJoin:
/** @var ModelManager $manager */
$manager = \Phalcon\DI::getDefault()->getShared("modelsManager");
$data = $manager->createBuilder()
->columns('\Models\Application.*')
->from('\Models\Application')
->leftJoin('\Models\Preapproval', '\Models\Preapproval.application_id = \Models\Application.id')
->andWhere('\Models\Preapproval.id IS NULL')
->getQuery()
->execute();
这可能会对性能产生负面或正面影响,具体取决于您的数据库索引基数。
我遇到了类似的问题。您可以使用 raw sql, left joins (in my case i had to use many 'join ON' conditions) or you can try this