Я работаю с yii2, чтобы сделать основной сайт.
Мне нужно загружать пользователям понравившиеся видео, когда они вошли в систему.
В базе данных
Видео хранятся в видео таблице,
Пользователи хранятся в пользовательской таблице,
UserVideoJunction — это таблица соединений, в которой хранятся отношения между пользователями и видео.
Когда я использую Gii для генерации моделей и CRUD для 3 таблиц, все в порядке, я могу получить доступ ко всем данным и манипулировать ими.
Но проблема возникает, когда я пытаюсь получить видео, связанные с пользователем.
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()
функционировать?
Использование hasMany хорошо объясняется в Гид пользователя.
призвание getVideos()
возвращает только экземпляр ActiveQuery. Вы должны использовать это как-то, чтобы получить свои результаты.
Вы можете получить все строки в вашем отношении многие ко многим:
$videos = $user->getVideos()->all();
Кроме того, вы можете отфильтровать их так:
$videos = $user->getVideos()
->where(['>', 'year', 2000])
->orderBy('id')
->all();
В основном после getVideos()
вы можете фильтровать, группировать, считать, сортировать, делать что-нибудь с ActiveQuery, так же, как вы делаете при использовании find()
,
Попробуй это:
$videos = $user->videos;
Или это:
$videos = $user->getVideos()->all();