Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel/雄辩:透视表上的条件_Laravel_Eloquent_Laravel 5.5 - Fatal编程技术网

Laravel/雄辩:透视表上的条件

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

我有3个表“用户”、“团队”和“团队用户”一个数据透视表。透视表包含一个布尔字段“kicked”。我没有找到方法获取用户未被踢出的团队列表。我的代码如下所示:

$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如果这解决了你的问题,那么它确实是无用的,即使这是你自己的答案,你也应该接受它。帮助那些在将来偶然发现这一点的人。