基于关系数据的查询 |拉拉维尔 5.4

Posted

技术标签:

【中文标题】基于关系数据的查询 |拉拉维尔 5.4【英文标题】:Query on the base of relational data | Laravel 5.4 【发布时间】:2017-06-16 20:19:58 【问题描述】:

我正在寻找基于关系表信息获取信息的解决方案,例如

我有两个模型 UserPost

用户有很多帖子帖子属于用户

我希望获得具有 role = tasker 并且 帖子 少于 5 个

的用户

请指导我如何在 laravel 5.4

【问题讨论】:

您是否尝试过先阅读查询?我相信您可以从here 构建您的答案 是的,我阅读了文档,但找不到上面提到的解决方案。你能告诉我确切的解决方案吗?谢谢 我无法为您提供确切的解决方案,但我假设您必须使用 group by 和 having 子句加入 post 表。希望这会有所帮助。 【参考方案1】:

我在这里对您的数据库结构和字段名称做出一些假设,但这应该会让您接近:

User::whereHas('posts', function($query) 
      $query->select('posts.*')
            ->join('users', 'posts.user_id', '=', 'users.id')
            ->groupBy('users.id')
            ->havingRaw('sum(posts.id) < 5')
)->having('role', '=', 'tasker')->get();

可能并不准确,但这就是它的要点。

【讨论】:

我是这样做的。 $users = DB::table('users') ->select(DB::raw('COUNT(posts.id) as total_posts'), 'users.*') ->leftJoin('posts', 'users. id', '=', 'posts.user_id') ->groupBy('users.id') ->having('total_posts', 'where('users.role', '=' , '任务者');

以上是关于基于关系数据的查询 |拉拉维尔 5.4的主要内容,如果未能解决你的问题,请参考以下文章

如何使用查询生成器在数组中建立关系?拉拉维尔

查询: 在邮递员的 whereHas 处返回,但表中有数据。拉拉维尔

如何签入 ::whereHas 查询某个列值?拉拉维尔

如何使用 spatie/laravel-query-builder 过滤/搜索具有关系的数据? (拉拉维尔)

拉拉维尔。在所有路线中保持变化

拉拉维尔。在具有关系的模型中使用 scope()