gpt4 book ai didi

mysql - Eloquent 简化/组合查询

转载 作者:行者123 更新时间:2023-11-29 22:56:22 24 4
gpt4 key购买 nike

我正在尝试简化以下查询。我有一个仪表和一个关系(+或-),我想根据仪表标准对日期范围求和。应将正计量相加,并从总和中减去负计量。如下所示,我将meter数组分成两个仅带有id的数组($meter_plus,$meter_minus),两个数组都用于求和值,但应减去$meter_minus。

//编辑:获取仪表

$begin = new \DateTime($from);
$end = new \DateTime($to);
$end = $end->modify('+1 day');
// find points and meters by group
$grouping = App\Grouping::with('points.meters')->find($group_id);
$meter_plus = [];
$meter_minus = [];
// each group has one-to-many points, each point has one-to-many meters
foreach($grouping->points as $point) {
foreach($point->meters as $meter) {
if($meter->Relation == '+') {
array_push($meter_plus, $meter);
} else {
array_push($meter_minus, $meter);
}
}
}

//Edit2:点-米关系

public function meters()
{
return $this->belongsToMany('App\EnergyMeter', 'meteringpoint_energymeter_relation', 'point_id', 'meter_id')
->whereHas('users', function ($q) {
$q->where('UserID', Auth::id());
})
->where('Deleted', 0)
->select('*', 'meteringpoint_energymeter_relation.Relation')
->orderBy('EMNumber');
}

--

$plus = Data::selectRaw('sum(values) as data')
->where('PointOfTime', '>', $begin->format('U'))
->where('PointOfTime', '<=', $end->format('U'))
->whereIn('meter_id', collect($meter_plus)->lists('id'))
->first();

$minus = Data::selectRaw('sum(values) as data')
->where('PointOfTime', '>', $begin->format('U'))
->where('PointOfTime', '<=', $end->format('U'))
->whereIn('meter_id', collect($meter_minus)->lists('id'))
->first();

$data = $plus->data - $minus->data

这很好用,但我想

  1. 改进查询
  2. 计算查询中的最终总和

最佳答案

使用 whereBetween 作为您的 PointOfTime 范围和 sum 而不是 selectRaw。另外,如果 $meter_plus 已经是一个仅包含 id 的数组,则您无需使用 collect 执行任何操作。您可能还想指定要查询的表。

$plus = Data::table('some_table')
->sum('values')
->whereBetween('PointOfTime',array($begin->format('U'), $end->format('U')))
->whereIn('meter_id', $meter_plus)
->sum('values')
->get();

关于mysql - Eloquent 简化/组合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28696875/

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