Laravel/雄辩:透视表上的条件
我有3个表“用户”、“团队”和“团队用户”一个数据透视表。透视表包含一个布尔字段“kicked”。我没有找到方法获取用户未被踢出的团队列表。我的代码如下所示:Laravel/雄辩:透视表上的条件,laravel,eloquent,laravel-5.5,Laravel,Eloquent,Laravel 5.5,我有3个表“用户”、“团队”和“团队用户”一个数据透视表。透视表包含一个布尔字段“kicked”。我没有找到方法获取用户未被踢出的团队列表。我的代码如下所示: $teams = Team::withCount('users') ->where($params) ->orderBy(DB::raw('users_count / max_members'), 'desc') ->orderBy
$teams = Team::withCount('users')
->where($params)
->orderBy(DB::raw('users_count / max_members'), 'desc')
->orderBy('team_id', 'desc')
->has('users', '<', DB::raw('max_members'));
$user = app('auth')->user();
if (isset($user)) {
// Here add the condition to exclude teams the user has been kicked from
}
首先,按照惯例,您的pivot应该命名为team_user,并且有team_id和user_id列,当然,它也可以有额外的内容 下一步,如果尚未建立关系,则应在模型内建立关系。在您的用户模型中使用belongtomany关系可以获取这样的团队 $user->teams 然后你可以简单地做这个 $user->teams->where'kicked',false->get
有关关系的更多详细信息,请参见pivot表的多对多。首先,按照惯例,您的pivot应命名为team_user,并具有team_id和user_id列。当然,也可以具有额外的内容 下一步,如果尚未建立关系,则应在模型内建立关系。在您的用户模型中使用belongtomany关系可以获取这样的团队 $user->teams 然后你可以简单地做这个 $user->teams->where'kicked',false->get
有关关系的更多详细信息,请参见pivot表的多对多查看查看文档,我发现:
if (isset($user)) {
$teams->whereDoesntHave('users', function ($query) use ($user) {
$query->where("is_kicked", "=", '1')
->where('teams_users.user_id', '=', $user->id);
});
}
它在SQL查询中生成“不存在”条件。
很好用 翻阅文档,我发现:
if (isset($user)) {
$teams->whereDoesntHave('users', function ($query) use ($user) {
$query->where("is_kicked", "=", '1')
->where('teams_users.user_id', '=', $user->id);
});
}
它在SQL查询中生成“不存在”条件。
很好用 可能的重复可能的重复谢谢你,你让我走上了正确的道路。实际上,我使用了$teams->whereDoesntHave'users',函数$query{};这会以我想要的方式过滤我的查询。谢谢你,你让我走上了正确的道路。实际上,我使用了$teams->whereDoesntHave'users',函数$query{};它以我想要的方式过滤我的查询。为什么使用DB::raw?@Nathanhefley如果这解决了你的问题,即使这是你自己的答案,你也应该接受它。帮助那些在将来偶然发现这一点的人。为什么使用DB::raw?@Nathanhefley如果这解决了你的问题,那么它确实是无用的,即使这是你自己的答案,你也应该接受它。帮助那些在将来偶然发现这一点的人。