2014-09-18 32 views
0

我遇到问题。我有两个独立的数据库,一个用于电影,一个用于追随者。这是因为电影可以具有特定的电影数据(标题,图像,导演)等,然后我有一个关注表,以便用户可以按照电影。基本上这只是一个交叉表,它所有的都是id,userID,filmID。这通常用于如果用户转到电影页面,它会检查记录是否存在,如果是这样,它会执行x,y,z。Laravel雄辩地插入表之间的无关联?

现在在用户页面上,我试图列出他们所关注的所有内容。所以我现在可以说。

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

而且这将返回用户所关注的所有内容。然而,我的问题是我不想显示电影ID,我想显示图片,标题,导演等。但是,这些信息在电影表中。那么我怎么能说一个能够获得所有Follow实例的电话,并且能够抓取附在其上的电影行。这样我就可以走了。 echo $ following->标题,它会显示电影标题。谢谢

+0

那么做一个加入? 'Follow:where('userId','=',$ user-> id) - > join('film','film.id','=','follow.filmId')' 老实说,这个语法比仅仅执行sql更令人困惑... http://forumsarchive.laravel.io/viewtopic.php?id=3490 – TheOneWhoSighs 2014-09-18 21:52:35

+0

所以我这样做了,但是现在$ following-> title方法不起作用。就像我var dump $跟在所有数据在一起和它们一样,但我必须有不同的访问方式吗? – CMOS 2014-09-18 22:13:19

回答

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 followingUsers f STRAIGHT_JOIN followingFilms ff ON ff.id = f.filmId;'当然,我会格式化有点不同。包括它来自哪个数据库等等,但我真的不明白为什么存在... – TheOneWhoSighs 2014-09-18 22:57:56