2016-07-19 2 views
1

Я запускаю запрос, который даст мне result.Query приводится нижеEloquent отношения запроса с некоторой колонкой

Модели файл

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

контроллера файл

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

Результата этого запрос:

[{ 
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" 
} 
] 

Но я хочу, чтобы выполнить этот запрос

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

И этот запрос генерирует ошибку как

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`) 

Поэтому, пожалуйста, помогите мне в запросе.

ответ

0

попробовать это один

$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

Этот запрос только дать результат устройства, но единицы объекта равна нулю .. – User101

+0

Результат этого запроса [ { DEVICE_ID: 1, user_id: 2, имя_устройства: «Лампа 1», relay_num: 22, sensor_num: 4, Статус: 1, created_at: "2016-07-11 02:11:32", updated_at: "2016-07-19 08:25:30", units: [] } 10] – User101

+0

, пожалуйста, попробуйте мой обновленный ответ, я добавил device_id в список столбцов, который является FK таблицы –

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(); 
Смежные вопросы