我正在使用Cakephp 2.X版
我要运行sql,如:
SELECT field1, field2, field3, field3,
( IF(LOCATE('abc', field1), 4, 0) + IF(LOCATE('abc', field2), 3, 0) + IF(LOCATE('abc', field3), 2, 0) ) AS score
FROM sometable
WHERE ( (field1 LIKE '%abc%') OR (field2 LIKE '%abc%') OR (field3 LIKE '%abc%') )
ORDER BY score DESC
这个sql是由代码动态生成的。所以这个sql需要传递给paginate()函数才能通过cakephp进行分页。似乎cakephp分页功能不够灵活,无法处理复杂的sql。
要执行这个复杂的sql,我如何覆盖paginate()来对我的结果进行分页?
说明
我尝试进行自定义查询分页。 Controller获取关键字并生成SQL,我想将SQL字符串传递给public function paginate(Model $model, $conditions, $fields, $order, $limi ...)
函数,该函数在Model中被覆盖以运行此自定义查询。我怎样才能将SQL字符串传递给paginate函数。
有任何建议或暗示吗?
答案 0 :(得分:2)
您问题的简短回答是,您无法通过此查询对数据进行分页 - 或者,在完全使用计算字段时。您可能已经注意到,数据(尤其是计算字段中的数据)不会以data
- > Model
- > variable
数组格式返回蛋糕。相反,它作为索引数组返回。
为了实现你在CakePHP范围内尝试做的事情,我会使用普通的find来获取实际存储在表中的数据并编写一些Virtual Fields来进行你的计算正在找。然后,您可以根据虚拟字段进行分页:
由于虚拟字段在执行查找时的行为与常规字段非常相似,因此Controller :: paginate()也可以按虚拟字段排序。