【发布时间】:2016-03-09 20:09:02
【问题描述】:
我有一个CGridView,它在给定模型上调用search (AFAIK) 以获取要显示的模型列表。是否可以通过调用$model->some_method()的结果来排序所述视图的结果?
我读过很多类似的问题,他们都非常建议复制代码在 SQL 中的作用,例如 here。问题是some_method要复杂得多,不能用SQL编写。
我也读过关于 virtual attributes 的文章,这很适合,但如果我写的话:
public function getSomeMethod() { ... }
然后使用:
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>false,
'sort' => array(
'attributes' => array('somemethod'),
'defaultOrder' => array(
'somemethod' => CSort::SORT_ASC,
)
)
));
它给了我:
CDbCommand 未能执行 SQL 语句:SQLSTATE[42S22]: 未找到列:1054 未知列 't.somemethod' 在“订单子句”中。 执行的 SQL 语句为:SELECT * FROM
use_casetORDER BYt.somemethod
我该怎么办?
【问题讨论】:
-
可能您需要 CArrayDataProvider,因为您的属性在您的 sql 查询/表中不存在。使用 ArrayDataProvider,您可以构建具有真实和虚拟属性的自定义数据集