我有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_case
t
ORDER BYt
。somemethod
我该怎么办?
答案 0 :(得分:0)
defaultOrder数组内容必须是与CSort :: ConstantValue相关的列数组。
请参阅yii1 doc http://www.yiiframework.com/doc/api/1.1/CSort#defaultOrder-detail
'attributes'=>array(
'price'=>array(
'asc'=>'item.price',
'desc'=>'item.price DESC',
'label'=>'Item Price',
'default'=>'desc',
),
'*',
)
然后,如果您需要对方法结果进行排序,只需将此结果设置为正确的列,并在数组中设置此列名称。
如果您不能像sql语句那样定义方法,则无法使用数据提供者的顺序
问题是默认顺序和一般的顺序是由sql而不是yii或php管理的子句然后如果你不能像sql元素那样定义方法你不能用它来订购在dataProvider中......本质上是sql管理器中的dataProvider。