관련 테이블이 , order_product (order_id, product_id, quantity, product_price)
및 product
입니다. select SUM(p.quantity*p.product_price)
같이 total from order_product p GROUP by order_id
으로 계산하거나 hasmany로 쉽게 얻을 수있는 주문한 제품 수를 사용하여 주문 모델을 표시 할 수있는 yii2
격자보기를 사용하고 있습니다. 내 문제는 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. 특정 열의 jQuery 테이블 필터
- 4. 은 index.php를에있는 gridview yii2
- 5. Search + GridView (yii2)
- 6. 열의 두 번째 숫자 업데이트
- 7. 동작 다운로드 gridview yii2
- 8. 배열 데이터에서 gridview의 Yii2 필터
- 9. yii2 다중 필터
- 10. 두 번째 열의 Datagrid 포커스
- 11. 두 번째 열의 값을 기준으로 단일 열의 두 필드를 선택하십시오.
- 12. yii2 gridview 검색 상자 입력이 자동으로 지워짐
- 13. Yii2 CRUD에 클래스 추가 GridView
- 14. 이 문서를 보면의 GridView Yii2
- 15. Yii2 Gridview 현재 행 값
- 16. 쿼리는 두 번째 테이블
- 17. MySQL은 두 번째 테이블
- 18. 쿼리에 두 번째 테이블
- 19. 두 번째 테이블
- 20. 두 번째 열의 값을 찾으려면 vlookup
- 21. 첫 번째 열의 첫 번째 열 찾기, 두 번째 열의 첫 번째 열
- 22. 첫 번째 테이블 열의 최소 너비는
- 23. 정렬 가능한 테이블 - 첫 번째 열의 오류
- 24. 테이블 첫 번째 열의 고정 폭
- 25. Yii2 모달 대화 상자 내에서 Gridview 필터링?
- 26. 하나의보기에서 두 개의 GridView
- 27. Yii2, GridView, registerJs를 한 번만 바인딩하십시오.
- 28. Gridview 열의 자동 간격은?
- 29. gridview 열의 최대 값
- 30. Gridview 열의 값 찾기
지금까지 시도한 것 또는 조금 더 자세히 설명해주세요. –
시도해보십시오. [link] (http://www.yiiframework.com/wiki/679/filter-sort-by-summary-data-in-gridview-yii-2-0/) 또는 자세히 설명하십시오. – Mohan
@Mohan 고마워요,하지만 고맙다는 답변을 주셔서 감사합니다하지만 이미 그것을 시도하고 나에게 그것을 처리 할 수없는 무결성 제약 위반 준 "SQLSTATE [23000] : 무결성 제약 위반 : 1052 열 '에 대한 조항'모호합니다 실행되고있는 SQL은 다음과 같다 : SELECT COUNT (*) from order 'LEFT JOIN'customer' on'order'.customer_id' ='customer'.'id' LEFT JOIN (SELECT'order_id', SUM (quantity * product_price) 'order_product' GROUP BY'order_id')'orderSum' ON orderSum.order_id = id " – leila