我有几张表,但是我这里只演示两张白,一张是server表,一张是platform表。一个用来存储服务器的相关信息,一个用来存储服务器的所属平台。
最终需要如下的结果
Model
Server.php
增加如下代码,我没有在数据库做外键,所以直接在model里面添加即可。
public function getPlatform() { return $this->hasOne(Platform::className(), ['id' => 'platform_id']); }
Views
server/index.php
增加如下代码,用于显示,其中value其实就是$model['platform']['name']
[ 'class' => DataColumn::className(), 'label' => '购买平台', 'attribute' => 'platformName', 'value' => 'platform.name', ],
Search Model
如果只是显示的话,肯定不需要再次关联了,默认的getPlatform已经支持了,但是如果要进行查询、排序,则需要使用serverSearch里面的Search方法,所以需要在Search里面进行如下调整。
在$query
定义后添加关联关系,这里其实是joinWith
的Model
里面的get方法,只获取其名字。
$query->joinWith(['platform']);
排序:然后在load之前对排序进行追加,这个地方需要的是表的全名,原因可以看到下打印的sql
$dataProvider->sort->attributes['platformName'] = [ 'asc' => ['rx_platform.name' => SORT_ASC], 'desc' => ['rx_platform.name' => SORT_DESC], ];
查询过滤:在返回之前对$query
进行添加过滤条件,这个地方需要的是表的全名,原因可以看到下打印的sql
$query->andFilterWhere(['like', 'rx_platform.name', $this->platformName]);
测试过滤
暂无评论