Yii2使用ActiveDataProviderRecord中的计算进行排序
我想在yii2 ActiveDataProvider中添加一个带有cacluations的groupby。 因此,目前我的数据库中有以下字段Yii2使用ActiveDataProviderRecord中的计算进行排序,yii2,yii2-model,yii2-active-records,Yii2,Yii2 Model,Yii2 Active Records,我想在yii2 ActiveDataProvider中添加一个带有cacluations的groupby。 因此,目前我的数据库中有以下字段 tbl_products id, products, pts_log,pts_chum 所以我想用公式把我的数据分组 pts_log * pts_chum / 100 因此,我的控制器中有以下内容 ActiveDataProvider([ 'query' => $query, 'sort' => ['d
tbl_products
id, products, pts_log,pts_chum
所以我想用公式把我的数据分组
pts_log * pts_chum / 100
因此,我的控制器中有以下内容
ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['(pts_log * pts_chum / 100)' => SORT_DESC]],
'pagination' => [
'pageSize' => $this->paginator['perPage']/2,
'page' => $this->paginator['page']
],
]);
但我现在犯了一个错误
undefined (pts_log * pts_chum / 100)
这适用于一个项目键,如
pts\u log
。我需要添加什么才能使用公式进行排序。在这种情况下,您会得到一个错误未定义(pts_log*pts_chum/100),因为它不是列名,也不是有效的表达式
您需要在ActiveRecord模型中创建新变量,并用计算表达式中的数据填充它
然后在sort'sort'=>['defaultOrder'=>['expr\u item'=>sort\u DESC]]中使用此变量名。
这里考虑了类似的选择
或准备$query,如:
$tn = TblProdukts::tableName();
$query = TblProdukts::find()->select([
TblProdukts::tableName().'.*',
"(".$tn.".id*".$tn.".rank/100) AS expr"
]);
在活动记录类中创建变量$expr
如果需要,将其添加到安全规则中:
public function rules()
{
return [
[[
'expr'// expression
],
'safe'],
];
}
您必须向查询分组依据的字段添加别名,并在排序中使用别名
$query = (new \yii\db\Query())
->select ('count(*) as c, ((pts_log * pts_chum / 100) as calc_field')
->from('tbl_products')
->groupBy('calc_field');
$dataProvider = new \yii\data\ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['calc_field' => SORT_DESC]],
]);
使用所需的简单聚合而不是计数(*)