Как добавить сумму ограничения суммы в Laravel? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть база данных со следующими отношениями:

Есть projects - то, что люди могут приобрести, также имеет user_id,

Есть backers - люди, которые покупают,

Есть orders - каждый заказ представляет собой покупку Project на Backer (Backer можно приобрести только Project только один раз). Это сумма, показывающая, сколько Backer заплатил за покупку Project

enter image description here

Мне нужно написать следующий запрос - учитывая, что $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();

но это не ограничивает $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

обратите внимание, что подзапросы почти одинаковы, за исключением того, что первый использует COunt(*), а второй - sum(orders.amount). Также обратите внимание, что этот запрос выполняется, если были заданы все параметры, но он может быть короче, если не заданы некоторые параметры. Проблема, которую я получаю, состоит в том, что у меня нет нумерации страниц с таким запросом.

1 Ответ

0 голосов
/ 09 мая 2018

Попробуйте это:

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

}, '>=', $leastProjectCount)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...