在Laravel 5.4中有没有雄辩的做左撇子的方式

时间:2017-07-03 08:21:00

标签: laravel-5 eloquent left-join laravel-5.4

是否有雄辩的方式在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); }) - >得到();  }

数据库模型:enter image description here

提前致谢!

1 个答案:

答案 0 :(得分:0)

在没有实际编写左/内连接的情况下执行此操作的方法是使用雄辩的关系。

在您的情况下,您将拥有2个模型类:UserGame

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对象的“游戏”属性中为您提供这些游戏。