Нужно руководство по созданию запроса к базе данных Laravel - PullRequest
0 голосов
/ 04 мая 2020

В Laravel 6.18 Я пытаюсь выяснить, как воссоздать следующий Postgres запрос.

with data as (
    select date_trunc('month', purchase_date) as x_month,  date_trunc('year', purchase_date) AS x_year,
    sum (retail_value) AS "retail_value_sum" 
    from coins 
    where user_email = 'user@email.com' and sold = 0
    group by x_month, x_year
    order by x_month asc, x_year asc
)
select x_month, x_year, sum (retail_value_sum) over (order by x_month asc, x_year asc rows between unbounded preceding and current row)
from data

Я знаю, как построить основную часть запроса

$value_of_all_purchases_not_sold = DB::table('coins')
    ->select(DB::raw('date_trunc(\'month\', purchase_date) AS x_month, date_trunc(\'year\', purchase_date) AS x_year, sum(retail_value) as purchase_price_sum'))
    ->where('user_email', '=', auth()->user()->email)
    ->where('sold', '=', 0)
    ->groupBy('x_month', 'x_year')
    ->orderBy('x_month', 'asc')
    ->orderBy('x_year', 'asc')
    ->get();

, но как построить с данными в виде ( и второй *)? 1009 * выберите ?

Мне нужно, чтобы данные были кумулятивными, и я бы лучше сделал расчет в БД, чем в PHP.

1 Ответ

1 голос
/ 04 мая 2020

Laravel не имеет встроенных методов для common table expression. Вы можете использовать сторонний пакет, такой как this - у него очень хорошая документация. Если вы не хотите использовать внешнюю библиотеку, вам нужно использовать метод построителя запросов select с такими привязками, как

$results = DB::select('your-query', ['your', 'bindings']);

return Coin::hydrate($results); // if you want them as collection of Coin instance.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...