PHP

Yii2 关联表查询、排序

微信扫一扫,分享到朋友圈

Yii2 关联表查询、排序
收藏 0 0

我有几张表,但是我这里只演示两张白,一张是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]);

测试下过滤

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

Yii2 Post 退出

上一篇

Python 格林尼治时间字符串转本地时间

下一篇

你也可能喜欢

发表评论

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

提示:点击验证后方可评论!

插入图片