gpt4 book ai didi

mysql - Laravel Eloquent 地查询条件下来自另一个表的值的总和

转载 作者:行者123 更新时间:2023-12-05 07:07:55 27 4
gpt4 key购买 nike

我有两张 table 。交易和分配。一个交易可以有多个分配。关系定义如下:

内部分配表

class Allocation extends Model
{
public function transaction_fk(){
return $this->belongsTo('App\Models\Transaction','transaction_id');
}
}

内部事务表

class Transaction extends Model
{
public function allocations() {
return $this->hasMany('App\Models\Allocation');
}
}

我需要查询交易表中具有特定 ID 的所有行以及该交易行的分配总和如果交易总计不等于分配总计的总和,则使用分配总计的总和。大致如下:

Transaction::where('id',$id)->where('amount','!==','sum(allocations.amount)')->with('balance' as 'sum(allocations.amount)')->get();

此查询无效。我错过了什么?

我能够将它作为一个简单的查询来完成,我循环遍历并进行了第二个查询并添加到列表中。它给了我正确的结果。如您所见,这是冗长且缓慢的。我需要在一次查询数据库时立即执行此操作。

 $transactions2 = Transaction::where('contact_type','supplier')
->where('contact_id',$ehead->supplier_id)
->get();

$transactions = [];
foreach ($transactions2 as $item) {
$sum = Allocation::where('transaction_id',$item['id'])->get()->sum('amount');
if($item['amount'] !== $sum){
$item->unallocated_amount = $sum;
array_push($transactions, $item);
}

}

最佳答案

如果您想在单个查询中执行此操作,则必须使用 groupBy 和聚合函数。

$items = Transaction::query()
->join('allocations', 'transactions.id', '=', 'allocations.transaction_id')
->groupBy('transactions.id')
->having('transactions.amount', '<>', 'sum(allocations.amount)')
->whereIn('transactions.id', $transactions2)
->select('transactions.*')
->get();

关于mysql - Laravel Eloquent 地查询条件下来自另一个表的值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62014625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com