如何聚合 Laravel 中相关 table 字段的查询?
How to aggregate query on related table's field in Laravel?
我的 laravel 5.4 应用程序有一对多(反向)关系。有两个模型 Sale
和 Vehicle
与场景相关联。
Sale
模型上的关系是:
public function vehicle()
{
return $this->belongsTo('App\Models\Vehicle','vehicle_id');
}
Table sales
有以下字段:
id
、vehicle_id
、date_time
、status
等
Table vehicles
有以下字段:
id
、reg_number
、volume
、status
等
我要的是搜索条件下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');
我的 laravel 5.4 应用程序有一对多(反向)关系。有两个模型 Sale
和 Vehicle
与场景相关联。
Sale
模型上的关系是:
public function vehicle()
{
return $this->belongsTo('App\Models\Vehicle','vehicle_id');
}
Table sales
有以下字段:
id
、vehicle_id
、date_time
、status
等
Table vehicles
有以下字段:
id
、reg_number
、volume
、status
等
我要的是搜索条件下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 fromsales
wherestatus
= 1 anddate_time
< "2017-05-10 10:10:05" and exists (select * fromvehicles
wheresales
.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');