@MCFlower

Yii2 как прописать условие для связанной таблицы?

Добрый день.
Бьюсь уже который день.
Имеем модель таблицы Video2user который хранит user_id и video_id. Также есть модель таблицы Video в которой есть поля id, code, party.

Требуется именно через Active Record получить Code из базы video где например party = 2.
Если на чистом sql то это выглядит так
select v.code 
from video2user v2u, video v 
where v2u.video_id = v.id 
and v.party = 2 
and v2u.user_id = :user_id                
order by v2u.video_id

Так все работает, но почему именно Active Record - потому что полученную модель я использую в классе Pagination.

Итак что я делаю. В моделе Video2user создаю связь с моделью Video
public function getVideo(){
     return $this->hasOne(Video::className(), ['id' => 'video_id'])->where(['party' => 2]);
}


И в контроллере вызываю
$query2 = Video2user::find()->where(['user_id' => 5555])->with('video')->all();


Мне возвращается все данные по этому id пользователя, единственное только что там где party = 2 - добавляется массив второго уровня. А необходимо чтобы выбирались именно только те записи где party = 2 и ничего лишнего. Чтобы было удобно работать с Pagination.
  • Вопрос задан
  • 803 просмотра
Решения вопроса 2
@Vahmur
Network Administrator, Web Developer
Что-то типа
Worker::find()->where(['j.id' => 10])->joinWith('jobs j')->all();

?
Соответственно этот алиас можно применять также и в ->select('j.id').
Ответ написан
qonand
@qonand
Software Engineer
Если правильно понял Вашу проблему тогда стоит использовать joinWith:
$query2 = Video2user::find()->where(['user_id' => 5555])->joinWith('video')->all();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы