我可以将字符串传递给Zend sql的命令函数吗?

时间:2014-11-25 08:38:33

标签: zend-framework2 zend-db-select

我正在编写一个复杂的搜索算法来进行层级搜索。对于其中两个层,我需要非常奇怪的订单条款,Zend的sql构建器根本无法处理。有没有办法告诉Zend只是在order by子句中添加一个字符串而不试图解释和破坏它?

那些想知道的人,我的订单的一个例子是

IF(Name LIKE '1234 %' OR Name LIKE '% 1234 %' OR Name LIKE '% 1234' OR Code LIKE '1234 %' OR Code LIKE '% 1234 %' OR Code LIKE '% 1234', 1, 0) + IF(Name LIKE 'ASF %' OR Name LIKE '% ASF %' OR Name LIKE '% ASF' OR Code LIKE 'ASF %' OR Code LIKE '% ASF %' OR Code LIKE '% ASF', 1, 0)

它基本上计算当前记录包含的搜索字符串中的单词数,并按顺序计数。

我想做这样的事情

$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('Table');
$select->where($where);
$select->order($orderString);

1 个答案:

答案 0 :(得分:0)

如果order by子句的参数是一个普通字符串,那么它将被考虑 只是一个列名(跟随或不是" ASC"或" DESC")。

可能的解决方案是使用Expression类。像这样:

 $select->order(array(new \Zend\Db\Sql\Expression($orderString)));

希望这有帮助。