Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php yii2 gridview过滤第二个表列上的计数/总和_Php_Gridview_Filter_Yii2 - Fatal编程技术网

Php yii2 gridview过滤第二个表列上的计数/总和

Php yii2 gridview过滤第二个表列上的计数/总和,php,gridview,filter,yii2,Php,Gridview,Filter,Yii2,我有这些相关的表格:订单、订单、产品订单id、产品id、数量、产品价格和产品。 我使用yii2网格视图来显示订单模型,以及可以用类似sql的方式计算的订单总量 按订单id从订单产品p组中选择油底壳数量*产品p价格作为总计 或者使用一个php getter和订购的产品数量,我可以使用hasmany轻松获得这些产品。 我的问题是gridview过滤器。 如何在gridview中设置这些列的搜索和排序?我找到了答案 <?php namespace common\models; use Yii

我有这些相关的表格:订单、订单、产品订单id、产品id、数量、产品价格和产品。 我使用yii2网格视图来显示订单模型,以及可以用类似sql的方式计算的订单总量 按订单id从订单产品p组中选择油底壳数量*产品p价格作为总计 或者使用一个php getter和订购的产品数量,我可以使用hasmany轻松获得这些产品。 我的问题是gridview过滤器。 如何在gridview中设置这些列的搜索和排序?

我找到了答案

<?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;
    }
}

到目前为止,您已经尝试了什么,或者详细阐述了一点。请尝试这一个,或者在中详细阐述detail@Mohan谢谢你的回答,但我已经尝试过了,它给了我一个完整性约束冲突,我无法在这里处理它是SQLSTATE[23000]:完整性约束冲突:on子句中的1052列“id”不明确正在执行的SQL为:从订单左连接选择计数在订单上连接客户。客户\u id=客户。id左连接选择订单\u id,SUMquantityproduct\u price按order\u id按order\u id按orderSum.order\u id=id列出的order\u产品组的总价可以为您提供modelSearch.php的代码。因为我已经完成了链接。哦,找到了错误,我已经更新了文件