如何在Laravel中添加一定数量的约束?

nan*_*eri 5 mysql laravel eloquent

我有一个包含以下关系的数据库:

projects- 人们可以购买的东西,也有user_id,

backers- 购买的人,

orders-每个订单是一个购买的ProjectBacker(Backer只能购买各Project一次).这是一笔金额 - 显示Backer购买该金额的金额Project

在此输入图像描述

我需要的是写下面的查询 - 给定$user_id,$count$sum找到所有投资至少在$count项目数量上user_id等于$user_id并且具有高于那些项目的购买总和的所有支持者$sum.

  Backer::whereHas('projects', function ($q) use ($sum, $userId){

        $q->where('user_id', $userId);

    }, '>=', $leastProjectCount)->get();
Run Code Online (Sandbox Code Playgroud)

但它并不限制$sum购买

更新: 所以我提出了这个问题:

select  * from `backers` \r\n
                    WHERE id > 0 \r\n
                    AND (select count(*)\r\n
                           FROM `projects` \r\n
                           inner join `orders` on `projects`.`id` = `orders`.`project_id` \r\n
                           where `backers`.`id` = `orders`.`backer_id` \r\n
                           and `user_id` = 6 \r\n
                           and exists (\r\n
                               select * \r\n
                               from `tags` \r\n
                               inner join `project_tag` on `tags`.`id` = `project_tag`.`tag_id` \r\n
                               where `projects`.`id` = `project_tag`.`project_id` \r\n
                               and `id` in (27)\r\n
                           ) \r\n
                          ) >= 1 \r\n
                    AND (select sum(orders.amount)\r\n
                           FROM `projects` \r\n
                           inner join `orders` on `projects`.`id` = `orders`.`project_id` \r\n
                           where `backers`.`id` = `orders`.`backer_id` \r\n
                           and `user_id` = 6 \r\n
                           and exists (\r\n
                               select * \r\n
                               from `tags` \r\n
                               inner join `project_tag` on `tags`.`id` = `project_tag`.`tag_id` \r\n
                               where `projects`.`id` = `project_tag`.`project_id` \r\n
                               and `id` in (27)\r\n
                           ) \r\n
                          ) >= 12
Run Code Online (Sandbox Code Playgroud)

请注意,子查询几乎相同,只是第一次使用COunt(*)和第二次使用sum(orders.amount).并且还要注意,如果设置了所有参数,则运行此查询,但是如果未设置某些参数,则可以更短.我得到的问题是我没有这样的查询分页.

Jon*_*eir 0

尝试这个:

Backer::whereHas('projects', function ($q) use ($sum, $userId){
    $q->where('user_id', $userId)
        ->havingRaw('SUM(amount) > ? ', [$sum]);

}, '>=', $leastProjectCount)->get();
Run Code Online (Sandbox Code Playgroud)