基于关系数据的查询 |拉拉维尔 5.4
Posted
技术标签:
【中文标题】基于关系数据的查询 |拉拉维尔 5.4【英文标题】:Query on the base of relational data | Laravel 5.4 【发布时间】:2017-06-16 20:19:58 【问题描述】:我正在寻找基于关系表信息获取信息的解决方案,例如
我有两个模型 User 和 Post
用户有很多帖子和 帖子属于用户
我希望获得具有 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 处返回,但表中有数据。拉拉维尔