从 yii2 hasmany() 函数获取数据

B_S*_*ter 3 php sql junction yii2

我正在与 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']);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Sta*_*nov 6

hasMany 的用法在用户指南中有很好的解释。

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

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

$videos = $user->getVideos()->all();
Run Code Online (Sandbox Code Playgroud)

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

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

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