laravel - 需要有关如何构建 Laravel 数据库查询的指导
问题描述
在 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();
但是您如何构建with data as (和第二个select?
我需要数据是累积的,我宁愿在数据库中进行计算,而不是在 PHP 中。
解决方案
Laravel 没有用于common table expression
. 您可以使用像这样的第三方包- 它有一个非常好的文档。如果您不想使用外部库,那么您需要使用select
带有绑定的查询构建器的方法,例如
$results = DB::select('your-query', ['your', 'bindings']);
return Coin::hydrate($results); // if you want them as collection of Coin instance.
推荐阅读
- java - 在 Android Studio 中使用 VideoView '无法播放此视频'
- c# - WinForms如何打开资源文件夹中的文件
- graphviz - 创建循环时强制节点保持在顶部
- ios - 如何删除单元格并从firebase中删除 - SWIFT?
- python - 如何将 SQLAlchemy 查询转换为嵌套字典?
- python-3.x - 如何使用 MultiOutputRegressor 的 XGBoost 继续学习?
- python - 我的 return 语句没有返回值有问题
- c++ - NVAPI获取gpu输出物理索引
- c# - 实体框架 FirstOrDefault 谓词未返回预期结果
- python - DeprecationWarning:不推荐使用 AppURLopener 调用请求的样式。使用更新的 urlopen 函数/方法