我有两张桌子,一张支票和卡车
这是他们的结构:
table truck : has truckid, reg_no, truck_category
table check : has truck_id(fkey from truck table), checkid....
我想要实现的是在表格中使用卡车ID检查模型显示表格详细信息(reg_no,truck_category)
这是tblcheck模型中的关系
public function getTruck()
{
return $this->hasOne(TblTrucks::className(), ['id' => 'truck_id']);
}
所以我做了一个搜索模型:
public function rules()
{
return [
[['id', 'ref_no','done_by', 'done_at'], 'integer'],
[['checks_fails', 'done_on','truck_id'], 'safe'],
];
}
public function search($params)
{
$query = Tblchecks::find();
// add conditions that should always apply here
$query->joinWith('truck');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'ref_no' => $this->ref_no,
'check_has' => $this->check_has,
'done_by' => $this->done_by,
'done_at' => $this->done_at,
'done_on' => $this->done_on,
]);
// here am filtering with the same truck_id
$query->andFilterWhere(['like', 'truck.company', $this->truck_id]);
$query->andFilterWhere(['like', 'truck.regno', $this->truck_id]);
return $dataProvider;
}
所以在我的网格中我有
[
'attribute' => 'truck_id',
'width'=>'310px',
'value'=>'truck.company',
],
[
'attribute' => 'truck_id',
'header' => 'Truck number',
'value'=>'truck.regno',
]
上面没有过滤我的网格,我如何使用一个属性来过滤网格,这是一个显示相关项目的外键
答案 0 :(得分:1)
我这样做
模型中的(在你的情况下是tblcheck模型),你需要的每个字段都构建一个getter函数
public function getTruck()
{
return $this->hasOne(TblTrucks::className(), ['id' => 'truck_id']);
}
// Getter for truck.company
// this from the relation above (truck) return th field company
public function getTruck_company() {
return $this->truck->company;
}
搜索模型中的
// filter by company from Tblcheck
$query->joinWith(['truck' => function ($q) {
$q->where( truck_tabale_name.company LIKE "%' . $this->truck_company . '%"' );
}]);
并在网格视图中..只需使用getter
[
'attribute' => 'truck_company',
'width'=>'310px',
],