Yii2 关联表查询、排序

我有几张表,但是我这里只演示两张白,一张是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定义后添加关联关系,这里其实是joinWithModel里面的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]);

测试过滤

TrojanSun

锦城虽云乐,不如早还家。

暂无评论

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。

相关推荐

修改Yii2默认的CheckBox样式

对于不同的主题,对checkbox的样式要求是不一样的。 比如我想要一个下面的样式 可以当我使用默认的代码调用 ...