2014-09-18 5 views
0

У меня проблема. У меня есть две отдельные базы данных: одна для фильмов и одна для последователей. Это значит, что фильмы могут иметь конкретные данные фильма (название, изображение, режиссер) и т. Д., А затем у меня есть таблица, чтобы пользователь мог следить за фильмом. В основном это просто кросс-таблица, все, что у нее есть, это id, userID, filmID. Обычно это используется, если пользователь переходит на страницу фильма, он проверяет, существует ли запись, и если да, то x, y, z.Laravel Eloquent соединяется между столами, не связанными друг с другом?

Теперь на странице пользователя я пытаюсь перечислить все, что они следуют. Так что сейчас я могу сказать.

$following = Follow::where('userId', '=', $user->id)->orderBy('created_at', 'DESC')->get(); 

И это вернет мне все, что следует за пользователем. Однако моя проблема заключается в том, что я не хочу отображать идентификатор фильма, я хочу отображать изображение, название, режиссер и т. Д. Однако эта информация находится в таблице фильмов. Итак, как я могу сделать вызов, который получает все экземпляры Follow, но также захватывает прикрепленный к нему ряд фильмов. так что я могу идти. echo $ next-> title и отобразит название фильма. Спасибо

+0

Итак, присоединяйтесь? 'Follow :: where ('userId', '=', $ user-> id) -> join ('film', 'film.id', '=', 'follow.filmId')' Честно говоря, это синтаксис гораздо более запутанный, чем просто выполнение sql ... http://forumsarchive.laravel.io/viewtopic.php?id=3490 – TheOneWhoSighs

+0

Так что я сделал это, но теперь метод $ next-> title не работает. Например, если я var dump $, следуя всем данным, вместе и их, но мне, должно быть, придется обращаться к нему по-другому? – CMOS

ответ

0

Вот как я решил это решить, это позволяет использовать тот же процесс атрибута $ myquery->, не будучи сложным.

$followingUsers = Follow::where('userId','=', $user->id)->get(); 
    $followingFilms = Follow::where('userId','=', $user->id)->get(); 
    $followedFilms = new stdClass(); 
    $i = 0; 
    foreach ($followingFilms as $follow) 
    { 
     $followedFilm = new stdClass(); 
     $film = Film::where('id','=', $follow->filmId)->first(); 
     $followedFilm->title = $film->title; 
     $followedFilm->coverUrl = $film->image; 
     $followedFilm->slug = $film->slug; 
     $followedFilm->id = $film->id; 
     $followedFilms->$i = $followedFilm; 
     $i++; 
    } 

Это происходит каждый объект таблицы наблюдения, делает SQL запрос, чтобы получить информацию, а затем собирает все это в объект $ followedFilms.

+0

Человек, все это, когда в sql все, что вам нужно сделать, это 'SELECT * FROM followUsers f STRAIGHT_JOIN nextFilms ff ON ff.id = f.filmId;' Конечно, я бы отформатировал это немного по-другому. Включите, из какой базы данных это происходит, и т. Д. Но я действительно не понимаю, почему это существует ... – TheOneWhoSighs

Смежные вопросы