2016-07-19 29 views
1

ich die Abfrage renne, die mir geben die result.Query unterhalbEloquent Beziehung Abfrage mit einigen Spalte

Modelldatei

public function units() 
    { 
     return $this->hasMany('App\PowerConsumption','device_id','device_id'); 
    } 
Datei

-Controller gegeben

return Device::with('units')->where('user_id',2)->get(); 

Ergebnis dieses Abfrage ist:

[{ 
device_id: 1, 
user_id: 2, 
device_name: "Bulb 1", 
relay_num: 22, 
sensor_num: 4, 
status: 1, 
created_at: "2016-07-11 02:11:32", 
updated_at: "2016-07-19 08:25:30", 
units: [ 
{ 
p_id: 1, 
device_id: 1, 
unit: 0.022121944444444, 
month: "7", 
hour: "1", 
minute: "0", 
created_at: "2016-07-18 00:00:00", 
updated_at: "2016-07-18 00:00:00" 
}, 
{ 
p_id: 2, 
device_id: 1, 
unit: 0.022121944444444, 
month: "7", 
hour: "1", 
minute: "5", 
created_at: "2016-07-18 00:00:00", 
updated_at: "2016-07-18 00:00:00" 
} 
] 

Aber ich möchte diese Abfrage auszuführen

Device::with('units')->groupBY('hour') 
       ->selectRaw('round(sum(unit),4) as yAxis,hour as xAxis') 
       ->where('user_id',2)->get(); 
     } 

Und diese Abfrage erzeugen Fehler wie

QueryException in Connection.php line 713: 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'unit' in 'field list' (SQL: select round(sum(unit),4) as yAxis,hour as xAxis from `devices` where `user_id` = 2 group by `hour`) 

Also bitte mich in Abfrage helfen.

Antwort

0

versuchen diese

$devices = Device::with(['units' => function($query){ 
     $query->selectRaw('device_id,round(sum(unit),4) as yAxis,hour as xAxis'); 
    }]) 
    ->where('user_id',2) 
    ->get() 
    ->each(function ($item, $key) { 
     return $item->units->groupBy('xAxis'); 
    }); 
+0

Diese Abfrage nur das Ergebnis von Gerät, sondern Einheiten Objekt gibt null ist .. – User101

+0

Ergebnis dieser Abfrage [ { device_id: 1, user_id: 2, Vorrichtungsname: "Birne 1", Relaisnummer: 22, Sensornummer: 4, Status: 1, created_at: "2016-07-11 02:11:32", updated_at: "2016-07-19 08:25:30", Einheiten: [] } ] – User101

+0

Bitte versuchen Sie meine aktualisierte Antwort, ich habe device_id in die Spaltenliste hinzugefügt, die FK der Tabelle ist –

0
$devices = Device::with(['units' => function($query){ 
     $query->selectRaw('device_id,round(sum(unit),4) as yAxis,hour as xAxis')->groupBy('xAxis); 
    }]) 
    ->where('user_id',2) 
    ->get(); 
Verwandte Themen