linyaostalker
5 years ago
1 changed files with 160 additions and 0 deletions
@ -0,0 +1,160 @@ |
|||
<?php |
|||
|
|||
namespace backend\modules\shop\models\searchs; |
|||
|
|||
use yii\base\Model; |
|||
use yii\data\ActiveDataProvider; |
|||
use yii\helpers\ArrayHelper; |
|||
use backend\modules\shop\models\ars\ExpressArea; |
|||
|
|||
/** |
|||
* ExpressAreaSearch represents the model behind the search form of `backend\modules\shop\models\ars\ExpressArea`. |
|||
*/ |
|||
class ExpressAreaSearch extends ExpressArea |
|||
{ |
|||
/** |
|||
* @return array |
|||
* 增加创建时间查询字段 |
|||
*/ |
|||
public function attributes() |
|||
{ |
|||
return ArrayHelper::merge(['created_at_range'], parent::attributes()); |
|||
} |
|||
/** |
|||
* {@inheritdoc} |
|||
*/ |
|||
public function rules() |
|||
{ |
|||
return [ |
|||
[['id', 'express_template', 'extra_price', 'basic_price', 'basic_count', 'extra_count', 'updated_at', 'created_at'], 'integer'], |
|||
[['province', 'city', 'area'], 'safe'], |
|||
['created_at_range','safe'], |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* {@inheritdoc} |
|||
*/ |
|||
public function scenarios() |
|||
{ |
|||
// bypass scenarios() implementation in the parent class
|
|||
return Model::scenarios(); |
|||
} |
|||
/** |
|||
* @return array |
|||
* 列格式 |
|||
*/ |
|||
public function columns() |
|||
{ |
|||
return [ |
|||
[ |
|||
'class' => 'blobt\grid\CheckboxColumn', |
|||
'width' => '2%', |
|||
'align' => 'center' |
|||
], |
|||
'id', |
|||
['attribute' => 'city', |
|||
'value' => function ($model) { |
|||
$array = explode(',', $model->city); |
|||
$cities = []; |
|||
foreach (\backend\modules\shop\models\ars\City::find()->andWhere(['in', 'city_id', $array])->all() as $city) { |
|||
$cities[] = $city->name; |
|||
} |
|||
return implode(' // ', $cities); |
|||
}, |
|||
], |
|||
'express_template', |
|||
//'extra_price',
|
|||
//'basic_price',
|
|||
//'basic_count',
|
|||
//'extra_count',
|
|||
//'updated_at',
|
|||
//'created_at',
|
|||
[ |
|||
'class' => 'iron\grid\ActionColumn', |
|||
'align' => 'center', |
|||
], |
|||
]; |
|||
} |
|||
/** |
|||
* @param $params |
|||
* @return ActiveDataProvider |
|||
* 不分页的所有数据 |
|||
*/ |
|||
public function allData($params) |
|||
{ |
|||
$query = ExpressArea::find(); |
|||
$dataProvider = new ActiveDataProvider([ |
|||
'query' => $query, |
|||
'pagination' => false, |
|||
'sort' => false |
|||
]); |
|||
$this->load($params); |
|||
return $this->filter($query, $dataProvider); |
|||
} |
|||
|
|||
/** |
|||
* Creates data provider instance with search query applied |
|||
* |
|||
* @param array $params |
|||
* |
|||
* @return ActiveDataProvider |
|||
*/ |
|||
public function search($params, $expressTemplateId) |
|||
{ |
|||
$query = ExpressArea::find()->where(['express_template' => $expressTemplateId]); |
|||
|
|||
// add conditions that should always apply here
|
|||
|
|||
$dataProvider = new ActiveDataProvider([ |
|||
'query' => $query, |
|||
'pagination' => [ |
|||
'pageSizeLimit' => [1, 200] |
|||
], |
|||
'sort' => [ |
|||
'defaultOrder' => [ |
|||
'id' => SORT_DESC, |
|||
] |
|||
], |
|||
]); |
|||
|
|||
$this->load($params); |
|||
return $this->filter($query, $dataProvider); |
|||
} |
|||
/** |
|||
* @param $query |
|||
* @param $dataProvider |
|||
* @return ActiveDataProvider |
|||
* 条件筛选 |
|||
*/ |
|||
private function filter($query, $dataProvider){ |
|||
if (!$this->validate()) { |
|||
// uncomment the following line if you do not want to return any records when validation fails
|
|||
// $query->where('0=1');
|
|||
return $dataProvider; |
|||
} |
|||
|
|||
// grid filtering conditions
|
|||
$query->andFilterWhere([ |
|||
'id' => $this->id, |
|||
'express_template' => $this->express_template, |
|||
'extra_price' => $this->extra_price, |
|||
'basic_price' => $this->basic_price, |
|||
'basic_count' => $this->basic_count, |
|||
'extra_count' => $this->extra_count, |
|||
'updated_at' => $this->updated_at, |
|||
'created_at' => $this->created_at, |
|||
]); |
|||
|
|||
$query->andFilterWhere(['like', 'province', $this->province]) |
|||
->andFilterWhere(['like', 'city', $this->city]) |
|||
->andFilterWhere(['like', 'area', $this->area]); |
|||
if ($this->created_at_range) { |
|||
$arr = explode(' ~ ', $this->created_at_range); |
|||
$start = strtotime($arr[0]); |
|||
$end = strtotime($arr[1]) + 3600 * 24; |
|||
$query->andFilterWhere(['between', 'created_at', $start, $end]); |
|||
} |
|||
return $dataProvider; |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue