Yii2-GridView 中让关联字段带搜索
情境要求:
要在订单(Order)视图的gridview中显示出客户(Customer)姓名,并使其具有与其它字段相同的排序和搜索功能。
数据库结构
订单表order含有字段customer_id 与 客户表customer的id字段关联
首先确保在Order Model中包含以下代码:
-
public function getCustomer()
-
{
-
return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
-
}
-
用gii会自动生成此代码;
第一步:
在OrderSearch添加一个$customer_name变量
-
class OrderSearch extends Order
-
{
-
public $customer_name; //<=====就是加在这里
-
}
-
//这里加上(不加不出现搜索框)
public function rules()
{
return [
[['id', 'admin_id', 'cat_id', 'add_time', 'update_time', 'listorder', 'status'], 'integer'],
[['title', 'description', 'content', 'url', 'author'], 'safe'],
[['customer_name'],'safe],//添加搜索字段规则
];
}
第二步:
修改OrderSearch中的search函数
-
public function search($params)
-
{
-
$query = Order::find();
-
-
//$query->joinWith('custome');不生效$query->leftJoin('Customer','order.customer_id = customer.id'); -
$dataProvider = new ActiveDataProvider([
-
'query' => $query,
-
]);
-
-
$dataProvider->setSort([
-
'attributes' => [
-
/* 其它字段不要动 */
-
/* 下面这段是加入的 (自己推测做排序用的)*/
-
/*=============*/
-
'customer_name' => [
-
'asc' => ['customer.customer_name' => SORT_ASC],
-
'desc' => ['customer.customer_name' => SORT_DESC],
-
'label' => 'Customer Name'
-
],
-
/*=============*/
-
]
-
]);
-
-
if (!($this->load($params) && $this->validate())) {
-
return $dataProvider;
-
}
-
-
$query->andFilterWhere([
-
'id' => $this->id,
-
'user_id' => $this->user_id,
-
'customer_id' => $this->customer_id,
-
'order_time' => $this->order_time,
-
'pay_time' => $this->pay_time,
-
]);
-
-
$query->andFilterWhere(['like', 'status', $this->status]);
-
$query->andFilterWhere(['like', 'customer.nick, $this->customer_name]) ;//<=====加入这句
-
-
return $dataProvider;
-
}
第三步:
修改order/index视图的gridview
-
-
'dataProvider' => $dataProvider,
-
'filterModel' => $searchModel,
-
'columns' => [
-
['class' => 'yii\grid\SerialColumn'],
-
'id',
-
'customer_id',
-
'status',
-
['label'=>'客户', 'attribute' => 'customer_name',
'value'=>function($model){],//<=====加入这句
return isset($model->customer)?$model->customer->nick:'';
} -
['class' => 'yii\grid\ActionColumn'],
-
],
-
]);
-

浙公网安备 33010602011771号