从yii2 hasmany()函数获取数据

时间:2017-01-04 17:47:14

标签: php sql yii2 junction

我正在与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()函数返回的内容吗?

2 个答案:

答案 0 :(得分:2)

User Guide

中详细解释了hasMany的用法

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

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

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

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

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

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

答案 1 :(得分:1)

试试这个:

$videos = $user->videos;

或者这个:

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