YII2 GridView聯表:文本框搜索、下拉框選擇搜索和排序

用戶資金記錄表和用戶表,兩張表通過userId關聯

需求:需要在資金記錄表中添加兩列,username用戶名和realname真實姓名,並實現自動搜索

直接乾貨

第一步:找到用戶資金記錄表對應的AR模型類 ,common\models\BorrowAccountLog,在該文件中進行關聯User表

public function getUser(){
    return $this->hasOne(User::className(),['userId'=>'userId']);
}

自己百度下hasOne

第二步:在BorrowAccountLogSearch中加入

public $username;
public $realname;

rules()方法中加入下面規則:
[['username','realname'],'safe'],//一定要加,不然搜索框出不來
search()方法中加入:
$query->joinWith(['user']);
$query->select("hs_borrow_account_log.*, hs_user.username, hs_user.realname");
$dataProvider->setSort([   //添加-----排序
    'attributes' => [
       //其他字段不動
        'username' => [
            'asc' => [User::tableName().'.username' => SORT_ASC],
            'desc' => [User::tableName().'.username' => SORT_DESC],
            'label' => '用戶名'
        ],
        'realname' => [
            'asc' => [User::tableName().'.realname' => SORT_ASC],
            'desc' => [User::tableName().'.realname' => SORT_DESC],
            'label' => '真實姓名'
        ]
    ]
]);

$query->andFilterWhere(['like', 'hs_user.username', $this->username]);
$query->andFilterWhere(['like', 'hs_user.realname', $this->realname]);
第三步:修改view文件
['label'=>'用戶名',  'attribute' => 'username',  'value' => 'user.username' ],
['label'=>'真實姓名',  'attribute' => 'realname',  'value' => 'user.realname' ],
如果你忽然不想要搜索框了,你可以這樣寫:
 'user.username'
 'user.realname'

還有一種情況:我們需要對聯表字段進行下拉框搜索,比如對狀態進行搜索,我們可以這麼幹
['label'=>'用戶類型',  'attribute' => 'type',  'value' => function ($model) {
        return $model->user->type == 1 ? '投資人' : '借款人';
    },
    'filter' => [0=>'借款人',1=>'投資人'],//重點在這裏,傳入一個數組,會下拉框顯示
    'headerOptions' => ['width' => '7%']
],





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章