使用yii2中的单个属性搜索相关表

时间:2016-10-30 15:44:15

标签: yii yii2 yii2-advanced-app

我有两张桌子,一张支票和卡车

这是他们的结构:

 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',
 ]

上面没有过滤我的网格,我如何使用一个属性来过滤网格,这是一个显示相关项目的外键

1 个答案:

答案 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',
],