首页 文章

如何在Laravel中相关表的字段上聚合查询?

提问于
浏览
0

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

Sale 模型的关系是:

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

sales 具有以下字段: idvehicle_iddate_timestatus 等 .

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]:未找到列:1054'字段列表'中的未知列'vehicles.volume'(SQL:选择sum(vehicles.volume)作为销售的汇总,其中status = 1且date_time <“2017-05-10 10:10:05“并且存在(选择*来自sales.vehicle_id = vehicles.id的车辆))

希望能够使用雄辩的查询等待“获得销售量总和”的解决方案 .

  • Edited

2 回答

  • 0

    在汇总 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');
    
  • 1
    select sum(volume) as aggregate from vehicles INNER JOIN sales ON vehicles.id=sales.vehicle_id
    

相关问题