【发布时间】:2021-11-06 22:04:06
【问题描述】:
这是我的数据库表: 我有 3 个相互关联的表。
Table Companies
--------------
ID TITLE
Table Customers
------------------------
ID company_id Name
Table Transactions
-----------------------------------------
ID company_id customer_id amount
这是我的模特关系:
Model Relations:
Company:
hasMany(Customers)
hasMany(Transactions)
Customer Model:
belongsTo(Company)
hasMany(Tranactions)
Transactions Model:
belongsTo(Company)
belongsTo(Customer)
我需要获取仅包含 3 笔交易的客户交易“金额”的总和。
这是我的工作方式:
$query = Customer::select('id')->withCount([
'transactions as transactions_count' => function ($query) use ($safe) {
$query->where('amount', '>', 0);
},
'transactions AS transactions_sum' => function ($query) use ($safe) {
$query->select(DB::raw("SUM(amount)"))->where('amount', '>', 0);
}
])->having('transactions_count', 3);
$sql_with_bindings = \Str::replaceArray('?', $query->getBindings(), $query->toSql());
$result = DB::select("
SELECT
SUM(x.transactions_sum) as amount
FROM
(".$sql_with_bindings.") x
");
对更好的雄辩方式有什么建议吗?
【问题讨论】:
标签: laravel eloquent relationship