gpt4 book ai didi

php - 通过模型上的特定方法订购 CGridView

转载 作者:行者123 更新时间:2023-11-29 21:16:26 28 4
gpt4 key购买 nike

我有一个CGridView,它在给定模型上调用search(AFAIK)来获取要显示的模型列表。是否可以通过调用 $model->some_method() 的结果对所述 View 的结果进行排序?

我读过很多类似的问题,他们都强烈建议复制代码在 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 failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't.somemethod' in 'order clause'. The SQL statement executed was: SELECT * FROM use_case t ORDER BY t.somemethod

我应该做什么?

最佳答案

defaultOrder 数组内容必须是与 CSort::ConstantValue 相关的列数组..

参见 yii1 文档 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语句一样定义方法,你就不能使用dataprovider的顺序

问题是默认顺序和一般顺序是由 sql 管理的子句,而不是由 yii 或 php 管理,那么如果您无法定义像 sql 元素这样的方法,您就不能在 dataProvider 中使用它进行排序。本质上是 SQL 管理器中的 dataProvider 。

关于php - 通过模型上的特定方法订购 CGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35901593/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com