我有这些相关的表格:order
,order_product (order_id, product_id, quantity, product_price)
和product
。 我正在使用yii2
网格视图来显示订单模型,它的总金额可以用sql计算,如 select SUM(p.quantity*p.product_price)
作为total from order_product p GROUP by order_id
或者使用php getter和我可以用hasmany轻松获得的产品数量。 我的问题是gridview过滤器。 如何在gridview中设置搜索和这些列的排序?yii2 gridview过滤在第二个表列的计数/总和
2
A
回答
4
我找到了答案。
<?php
namespace common\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\models\Order;
use common\models\OrderProduct;
class OrderSearch extends Order
{
public $total;
public $nbProd;
public $client;
/**
* @inheritdoc
*/
public function rules()
{
return [
[['total', 'nbProd', 'client'], 'safe'],
[['nbProd'], 'number'],
[['client'], 'string'],
];
}
public function search($params)
{
$query = Order::find();
$query->joinWith(['customer']);
$subQuery = OrderProduct::find()
->select('order_id, SUM(quantity*product_price) as total, count(product_id) as nbProd')
->groupBy('order_id');
$query->leftJoin(['orderSum' => $subQuery], 'orderSum.order_id = order.id');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['id'=>SORT_DESC]],
]);
$dataProvider->sort->attributes['client'] = [
'asc' => ['customer.company' => SORT_ASC],
'desc' => ['customer.company' => SORT_DESC],
];
$dataProvider->sort->attributes['nbProd'] = [
'asc' => ['orderSum.nbProd' => SORT_ASC],
'desc' => ['orderSum.nbProd' => SORT_DESC],
];
$dataProvider->sort->attributes['total'] = [
'asc' => ['orderSum.total' => SORT_ASC],
'desc' => ['orderSum.total' => SORT_DESC],
];
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'orderSum.total' => $this->total,
'orderSum.nbProd' => $this->nbProd,
]);
$query->andFilterWhere(['like', 'customer.name', $this->client]);
return $dataProvider;
}
}
+0
谢谢v多!!! – mrateb
相关问题
- 1. Yii2过滤器GridView中的总和数据
- 2. 在Yii2 gridview中累计/运行总数
- 3. yii2 - 使用第二个模型在GridView中列
- 4. Yii2:获取总和的GridView
- 5. 计数和第二列表的条件
- 6. Yii2在过滤gridview后导出
- 7. 基于第一个选择列表过滤第二个选择列表
- 8. Yii2的GridView +过滤不ActiveRecord的
- 9. 左加入到获得列的总和在第二个表
- 10. 计数和总计列表
- 11. GridView列过滤
- 12. Yii2 - GridView控件过滤unix时间戳
- 13. yii2选择2 GridView控件过滤searchmodel
- 14. yii2在gridview窗口小部件过滤器中的下拉列表
- 15. 谷歌图表计算和显示过滤表格总数
- 16. 第二度加入的列的总和?
- 17. MySQL的加入两个表计数和从第二个表
- 18. 在gridview中计算总数
- 19. 有效地从第二列表(元组)过滤对于一个Python列表值
- 20. 过滤器的行和列总和值
- 21. SSRS有一个参数过滤第二个参数中的值
- 22. 如何过滤Yii2中有条件分组的数据GridView
- 23. Yii2 Gridview过滤基于varchar作为输入值的Int数据类型的列
- 24. 角度多重过滤器,第二个过滤器是空的?
- 25. 连接两个表并使用第一个表列“过滤”第二个表的快速方法是什么?
- 26. 从第二个表计数行
- 27. 根据第1列和第2列的唯一组合计数(第3列)和总和(第4列的值);
- 28. 在列表C++中查找第一个和第二个元素
- 29. 使用下拉列表过滤GridView
- 30. 在GridView的索引视图上过滤结果Yii2
你到目前为止试过的还是细化了一下。 –
试试这个[link](http://www.yiiframework.com/wiki/679/filter-sort-by-summary-data-in-gridview-yii-2-0/)或详细说明 – Mohan
@Mohan谢谢你的答案,但我已经尝试过,它给了我一个完整性约束冲突,我无法在这里处理它是 “SQLSTATE [23000]:完整性约束冲突:1052列子句中的列'id'含糊 正在执行的SQL是:SELECT COUNT(*)FROM'order' LEFT JOIN'customer' ON'order'.'customer_id' ='customer'.'id' LEFT JOIN(SELECT'order_id',SUM(quantity * product_price) as total FROM'order_product' GROUP BY'order_id')'orderSum' ON orderSum.order_id = id“ – leila