У меня возникли проблемы с JOIN за 2 столами. Один из них напрямую не связан с моделью «Послание».Laravel Eloquent JOIN за несколькими столами
Мои таблицы:
videos
-- id
-- file
messages
-- m_id
-- m_type
-- m_video
videos_languages
-- video_id
-- language_id
У меня есть следующие модели:
User.php
Video.php
Message.php
Video.php имеет следующее соотношение:
public function languages()
{
return $this->belongsToMany('Language','videos_languages','video_id','language_id')->withPivot('titel','vl_id');
}
message.php
public function messageVideos()
{
return $this->belongsTo('Video','m_video','id');
}
public function messageUser()
{
return $this->belongsTo('Visitor','m_from','v_id');
}
В моем основном сценарии, я следующая команда:
$message = new Message();
$message->where('m_to','=',12345)->with('messageVideos','messageUser')->first()
Так я получаю данные сообщения с соответствующими таблицами «Видео» и «Пользователем».
Моя проблема сейчас: мне также нужны видео_языки в этой команде, и она не связана с моделью сообщения.
Возможно ли включить его в верхнюю команду и использовать отношение languages () от модели видео?
Вы можете вложить модели с, с точкой: -> с ('messageVideos.languages', 'messageUser') -> первый(); Это работает? –
Привет, Бьорн, спасибо, что работает. Но возможно ли добавить условие для языка в команде? Теперь у меня есть все языки, связанные с видео, но в одном mthod мне нужен только язык с идентификатором 1. – user2891491
Теперь я верю, что вам понадобится whereHas http://laravel.com/docs/4.2/eloquent#querying-relations, вы можете их вложить. – user2094178