用戶資金記錄表和用戶表,兩張表通過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%'] ],