2017-09-14 80 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 
相關問題