Yii2 通过 hasMany 获取关联数据

技巧库 · forecho · 于 7年前 发布 · 9742 次阅读

又名 Yii2 viaTable 的使用

场景

有一个文章表,可能会属于多个用户,于是设计了以下三个表: user(用户表)、article(文章表)、user_ref_article(用户关联文章表);

以下分别列出三个表的主要字段 :

user

| id | username |
| -------- | -------- |
|  1   | forecho   |
|  2   | echo   |

article

| id | title | content |
| -------- | -------- | -------- |
|  1   | 标题   |  内容  |

user_ref_article

| id | user_id | article_id |
| -------- | -------- | -------- |
|  1   | 1   |  1  |
|  2   | 2   |  1  |

快速获取 user id 为 1 的文章内容

在 User Model 里面添加以下代码:

/**
 * @return \yii\db\ActiveQuery
 */
public function getArticle()
{
    return $this->hasMany(Article::className(), ['id' => 'article_id'])
        ->viaTable(UserRefArticle::tableName(), ['user_id' => 'id']);
}

控制器使用:

$user = User::findOne(['id' => $id]);
$user->article;

PS: 结果待测试,提供的是思路。

本文由 forecho 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。


如果这篇文章对您有帮助,不妨微信小额赞助我一下,让我有动力继续写出高质量的教程。

共收到 1 条回复 Yii2
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册