2017-09-14 82 views
0

我在laravel 5.4应用程序中有一对多(反)关系。有两种型号SaleVehicle,它们与场景相关并与之相关。如何在Laravel的相关表格字段上聚合查询?

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]: 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))

希望等待一个解决方案“获得的量的总和销售'使用雄辩的查询。

  • 编辑
+0

我想你应该只是写出来的原MySQL查询开始其如果您直接使用Workbench,则会运行。然后,基于此,构建Laravel查询。如果你不能写MySQL查询,那么你可能还没有准备好攻击Laravel的一面。 –

回答

1

您需要使用求和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'); 
+0

谢谢Martin .. '$ totalQuantity = $ totalQuantityQuery-> join('vehicles','vehicles.id','=','sales.vehicle_id') - > select(\ DB :: raw('sum (vehicles.volume)as total_volume')) - > get()' 给出一个数组内的对象..使用..提取结果.. '$ totalQuantity [0] - > total_volume' –

+0

不客气... –

0
select sum(volume) as aggregate from vehicles INNER JOIN sales ON vehicles.id=sales.vehicle_id 
相关问题