知道为什么下面的代码可以正常工作吗?返回带有传感器和测量的设备
public function getLastMinutes($device_id,$sensor_id,$minutes = 10) {
...
$devices = Auth::user()->devices()->where("device_id",$device_id)->with(array('sensors.measurements' => function($query) use ($minutes,$sensor_id) {
$date = new DateTime;
$date->modify(-1*$minutes.' minutes');
$formatted_date = $date->format('Y-m-d H:i:s');
$query->where('measurements.created_at','>=',$formatted_date);
}))->get()->toArray();
return Response::json($devices);
...
但是当我添加第二个where("sensor_id",$sensor_id)测量从返回的json对象消失
public function getLastMinutes($device_id,$sensor_id,$minutes = 10) {
...
$devices = Auth::user()->devices()->where("device_id",$device_id)->with(array('sensors.measurements' => function($query) use ($minutes,$sensor_id) {
$date = new DateTime;
$date->modify(-1*$minutes.' minutes');
$formatted_date = $date->format('Y-m-d H:i:s');
$query->where("sensor_id",$sensor_id)->where('measurements.created_at','>=',$formatted_date);
}))->get()->toArray();
return Response::json($devices);
...
我错过了什么吗?
谢谢你的帮助!
我找到问题了。通过在对象查询中执行with(array('sensors.measurements ....
,您没有任何访问传感器…这意味着通过执行此$query->where("sensor_id",$sensor_id)
,将在测量表上搜索sensors_id…这是没有纠正的。因此,必须用一种含有'sensors'
的溶液和另一种含有'sensors.measuraments'
的溶液。
所以从这个(错误)
public function getLastMinutes($device_id,$sensor_id,$minutes = 10) {
...
$devices = Auth::user()->devices()->where("device_id",$device_id)->with(array('sensors.measurements' => function($query) use ($minutes,$sensor_id) {
$date = new DateTime;
$date->modify(-1*$minutes.' minutes');
$formatted_date = $date->format('Y-m-d H:i:s');
$query->where("sensor_id",$sensor_id)->where('measurements.created_at','>=',$formatted_date);
}))->get()->toArray();
return Response::json($devices);
...
到这个(正确)
...
$devices = Auth::user()->devices()->where("device_id",$device_id)
->with(array('sensors' => function($query) use ($sensor_id) {
$query->where('sensors.sensor_id',$sensor_id);
}))
->with(array('sensors.measurements' => function($query) use ($minutes,$sensor_id) {
$date = new DateTime;
$date->modify(-1*$minutes.' minutes');
$formatted_date = $date->format('Y-m-d H:i:s');
$query->where('measurements.created_at','>=',$formatted_date);
}))
->get()->toArray();
return Response::json($devices);
...
小提示。Laravel -debugbar是一个伟大的项目,你应该看看它,但它实际上并没有帮助我,因为我有一个SPA和Laravel正在做一个RESTFUL json服务器,由于某种原因,Laravel -debugbar没有启动…但这一小段代码实际上是伟大的(从获取查询执行在Laravel 3/4)
$queries = DB::getQueryLog();
$last_query = end($queries);
return Response::json($last_query);
希望能帮到你