2017-01-22 5 views
0

Ich habe verschiedene Abfragen, die unter verschiedenen Zeiträumen ausgewählt werden sollen. Ich möchte, dass sie auf einen BlickLaravel übergibt mehrere Variablen aus verschiedenen Abfragen an eine Ansicht

$sales = DB::table('sales') 
     ->join('drugs', 'drugs.id', '=', 'sales.drug_id') 
     ->select('sales.*','drugs.name', DB::raw('sum(sales.quantity_sold) as total_sales')) 
     ->whereYear('date_sold','>','2014') 
     ->whereYear('date_sold','<','2017')    
     ->get()->groupBy('sales.drug_id'); 

$stocks = DB::table('sales') 
     ->join('drugs', 'drugs.id', '=', 'sales.drug_id') 
     ->select('sales.*','drugs.name', DB::raw ('AVG(sales.quantity_sold) as average_sales')) 
     ->whereMonth('date_sold','=', Carbon::today()->month)    
     ->get()->groupBy('sales.drug_id'); 

$data = $sales->merge($stocks); 

Meiner Ansicht nach gebe ich einen Tisch haben wollen, wobei ich das Medikament, Gesamtumsatz und durchschnittliche Verkaufs in Folge haben wird.

@foreach($data as $key => $item) 
    <tr id="item{{$item->id}}">                    <td>{{$item->name}}</td>  
       <td>{{$item->total_sales}}</td>  
       <td>{{number_format($item->average_stocks,0)}}</td> 

Irgendwelche Vorschläge?

Antwort

0

Zuerst Gruppe sowohl die Sammelobjekte durch den gemeinsamen Bereich (drug_id) wie folgt:

$sales = DB::table('sales') 
     ->join('drugs', 'drugs.id', '=', 'sales.drug_id') 
     ->select('sales.*','drugs.name', DB::raw('sum(sales.quantity_sold) as total_sales')) 
     ->whereYear('date_sold','>','2014') 
     ->whereYear('date_sold','<','2017') 
     ->groupBy('sales.drug_id') 
     ->get()->groupBy('drug_id'); 

$stocks = DB::table('stocks') 
     ->join('drugs', 'drugs.id', '=', 'stocks.drug_id') 
     ->select('stocks.*','drugs.name', DB::raw ('AVG(stocks.quantity_sold) as average_stocks')) 
     ->whereMonth('date_sold','=', Carbon::today()->month) 
     ->groupBy('stocks.drug_id') 
     ->get()->groupBy('drug_id'); 

Dann verschmelzen sowohl die Sammlungen wie folgt:

$data = $sales->merge($stocks); 

Schließlich injizieren, um die Daten in die Ansicht von Ihrem Controller wie folgt:

return view('viewname', compact('data')); 
+0

Ich bekomme einen Fehler, rufen Sie eine Member-Funktion merge() auf einem Nicht-Objekt – Ashley

+0

Können Sie dd ($ sales) überprüfen, wie $ Umsatz aussieht? – Paras

+0

Für den Vertrieb :: Array: 3 [▼ 0 => {# 323 ▼ + "name": "Isoniazid, 300mg" + "total_sales": "409" } 1 => {# 324 ▼ + "name": "Dapsone, 100mgs" + "total_sales": "256" } 2 => {# 325 ▼ + "name": "Nevirapine, 200mgs" + "total_sales": "384" } ] und für das Lager: Array: 3 [▼ 0 => {# 326 ▼ + "name": "Isoniazid, 300mg" + "average_sales": "37,5000" } 1 => {# 327 ▼ + "na me ": "Dapsone, 100mgs" +" average_sales ": "20,8462" } 2 => {# 328 ▼ +" name ": "Nevirapine, 200mgs" +" average_sales ": "32,0000" } ] – Ashley

Verwandte Themen