如何聚合 Laravel 中相关 table 字段的查询?

How to aggregate query on related table's field in Laravel?

我的 laravel 5.4 应用程序有一对多(反向)关系。有两个模型 SaleVehicle 与场景相关联。

Sale 模型上的关系是:

public function vehicle()
    {
        return $this->belongsTo('App\Models\Vehicle','vehicle_id');
    }

Table sales 有以下字段: idvehicle_iddate_timestatus

Table vehicles 有以下字段: idreg_numbervolumestatus

我要的是搜索条件下Sale条记录的'vehicles.volume'字段之和

我已经尝试了一些方法,例如以下方法:

$query = Sale::where('status', 1);
$query = $query->where('date_time', '<', "2017-05-10 10:10:05");
$totalVolume  = $query->whereHas('vehicle')->sum('vehicles.volume');

并导致以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'vehicles.volume' in 'field list' (SQL: select sum(vehicles.volume) as aggregate from sales where status = 1 and date_time < "2017-05-10 10:10:05" and exists (select * from vehicles where sales.vehicle_id = vehicles.id))

希望使用 eloquent 查询等待 'get the sum of the volume of the sales' 的解决方案。

select sum(volume) as aggregate from vehicles INNER JOIN sales ON vehicles.id=sales.vehicle_id 

您需要在对 vehicles.volume 列求和之前使用联接

$totalVolume = Sale::where('status', 1)
    ->where('date_time', '<', "2017-05-10 10:10:05")
    ->join('vehicles', 'vehicles.id', '=', 'sales.vehicle_id')
    ->select(DB::raw('sum(vehicles.volume) as total_volume');