是否有雄辩的方式在Laravel中进行左联?
我们希望获得所有游戏并填写每个游戏的进度,如果它存在于user_games中。
现在我们已经编写了以下解决方案,但这根本不是很有说服力,我们很喜欢它。
public function usergames($ user_id){ return DB :: table('games') - > leftJoin('user_games',function($ join)use($ user_id){ $ join-> on('user_games.game_id','=','games.id') - > where('user_games.user_id','=',$ user_id); }) - >得到(); }
提前致谢!
答案 0 :(得分:0)
在没有实际编写左/内连接的情况下执行此操作的方法是使用雄辩的关系。
在您的情况下,您将拥有2个模型类:User
和Game
class User extends Model {
public function games() {
return $this->belongsToMany(App\Game::class);
}
}
现在,您可以像这样访问用户的游戏:
$user = App\User::find($user_id);
$usergames = $user->games; // Illuminate\Support\Collection
如果您想获得有游戏的用户列表,请查看急切加载。这看起来像这样:
User::with('games')->get();
这样,Eloquent将知道延迟加载关系意味着它只会运行2个查询。一个抓住用户。和一个抓住与用户关联的游戏,然后在user
对象的“游戏”属性中为您提供这些游戏。