如何在ZendFramework3中编写以下查询?
SELECT * FROM table_name ORDER BY FIELD(field_name, 'a','b','c');我试过
$select->order(new Expression("FIELD(field_name, 'a', 'b', 'c')"),field_name);但不能移动..。
发布于 2020-05-26 10:44:09
我认为你在某个地方犯了错误,一定要确保你:
use.
order() )正确导入了Expression,没有.。
Zend\Db\Sql\Expression是使用特定于DBMS的表达式扩展查询的正确方法。
通过下面的测试脚本,我得到了您的预期结果:
$platform = new Zend\Db\Adapter\Platform\Mysql();
$select = new Zend\Db\Sql\Select();
$select->from(['t' => 'table_name']);
$select->order(
new Zend\Db\Sql\Expression(sprintf(
"FIELD(t.%s, 'a', 'b', 'c')",
$platform->quoteIdentifier('field_name')
))
);
var_dump($select->getSqlString($platform));结果是:
string(81) "SELECT `t`.* FROM `table_name` AS `t` ORDER BY FIELD(t.`field_name`, 'a', 'b', 'c')"这里很少有注释:
当您使用Laminas instead.
Zend命名空间替换为Laminas,确保您总是从平台实例中用quoteIdentifier()引用标识符(您应该能够从您的表接收平台或在可能的地方接收DB instance).FIELD()预先计算的值创建另一列(您可以在应用程序中或在DDL级别上这样做)。发布于 2020-05-17 05:47:51
不使用表达式,您可以将字符串赋给order方法吗?
$select->order("FIELD(field_name, 'a', 'b', 'c')");如果字段名是变量
$select->order("FIELD(" . $field_name . ", 'a', 'b', 'c')");如果问题仍然存在,则可以通过打印查询来跟踪问题。
$select->query()->__toString()
or
$select->__toString();不要确切地记住查询,您可以尝试它们
https://stackoverflow.com/questions/61814350
复制相似问题