2017-09-14 4 views
0

私のlaravel 5.4アプリケーションに1対多(逆)の関係があります。シーンに関連して関連付けられたSaleVehicleの2つのモデルがあります。Laravelで関連するテーブルのフィールドにクエリを集計する方法は?

Saleモデル上の関係は、次のとおり

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

sales有し、次のフィールド: idvehicle_iddate_timestatus

vehicles有し、次のフィールド: idreg_numbervolume,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))

がうまくいけば「のボリュームの合計を取得するためのソリューションを待っています売上高は雄弁なクエリを使用しています。

  • 編集
+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

ありがとうございました.. '$ 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 
関連する問題