3

我正在与 yii2 合作制作一个基本网站。

我需要在用户登录时加载他们喜欢的视频。

在数据库中视频存储在视频表中,用户存储在用户表中,UserVideoJunction是存储用户与视频之间关系的联结表。

当我使用 Gii 为 3 个表生成模型和 CRUD 时,一切都很好,我可以访问和操作所有数据。

但是当我尝试获取与用户相关的视频时,问题就出现了。

public function getUservideojunctions()
{
    return $this->hasMany(Uservideojunction::className(), ['UserID' => 'UserID']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getVideos()
{
    return $this->hasMany(Video::className(), ['P_ID' => 'VideoID'])->viaTable('UserVideoJunction', ['UserID' => 'UserID']);
}

上面的代码是自动生成的代码。

有人可以告诉我如何显示getVideos()函数返回的内容吗?

4

2 回答 2

7

用户指南中很好地解释了 hasMany 的用法。

调用getVideos()仅返回 ActiveQuery 实例。您需要以某种方式使用它来获得结果。

您可以获取多对多关系中的所有行:

$videos = $user->getVideos()->all();

此外,您可以像这样过滤它们:

$videos = $user->getVideos()
     ->where(['>', 'year', 2000])
     ->orderBy('id')
     ->all();

基本上,在getVideos()您可以过滤、分组、计数、排序之后,使用 ActiveQuery 执行任何操作,就像您在使用find().

于 2017-01-04T18:11:06.903 回答
2

尝试这个:

$videos = $user->videos;

或这个:

$videos = $user->getVideos()->all();
于 2017-01-04T18:02:20.777 回答