通过 id 获取记录并使用 Laravel 和 eloquent 查询与 'wherebetween' 的关系
getting records by id and querying there relation with 'wherebetween' using Laravel and eloquent
我正在尝试从特定时间跨度内的特定记录器获取所有测量值。
如果我删除查询的“->wherebetween()”部分并查看结果,那么我将获得该记录器的所有传感器以及该传感器的所有相关测量值。
但是我无法对关系执行 wherebetween。
在控制器中查询
public function getChart(Request $request) {
$sensorCollection = Sensor::where('recorder_id', $request->recorder_id)
->with('getMeasurementsRelation')
->wherebetween('getMeasurementsRelation', function ($query) use ($request) {
return $query->wherebetween('timestamp',[$request->start_chart, $request->end_chart]);})
->get();
}
传感器模型中的关系
public function getMeasurementsRelation() {
return $this->hasmany('App\Models\measurement', 'sensor_id', 'id');}
您可以使用回调方法 below.Since 您没有提到开始和结束图表值格式。所以我假设它的 Y-m-d 格式。如果不在评论中让我知道,我可以根据以下内容修改我的答案您的需求
$sensorCollection = Sensor::where('recorder_id', $request->recorder_id)
->with(['getMeasurementsRelation'=>function($query)use($request){
$startChart=\Carbon\Carbon::createFromFormat('Y-m-d',$request->start_chart)->startOfDay();
$endChart=\Carbon\Carbon::createFromFormat('Y-m-d',$request->end_chart)->endOfDay();
$query->wherebetween('timestamp',[$startChart, $endChart]);
}])
->get();
我正在尝试从特定时间跨度内的特定记录器获取所有测量值。
如果我删除查询的“->wherebetween()”部分并查看结果,那么我将获得该记录器的所有传感器以及该传感器的所有相关测量值。
但是我无法对关系执行 wherebetween。
在控制器中查询
public function getChart(Request $request) {
$sensorCollection = Sensor::where('recorder_id', $request->recorder_id)
->with('getMeasurementsRelation')
->wherebetween('getMeasurementsRelation', function ($query) use ($request) {
return $query->wherebetween('timestamp',[$request->start_chart, $request->end_chart]);})
->get();
}
传感器模型中的关系
public function getMeasurementsRelation() {
return $this->hasmany('App\Models\measurement', 'sensor_id', 'id');}
您可以使用回调方法 below.Since 您没有提到开始和结束图表值格式。所以我假设它的 Y-m-d 格式。如果不在评论中让我知道,我可以根据以下内容修改我的答案您的需求
$sensorCollection = Sensor::where('recorder_id', $request->recorder_id)
->with(['getMeasurementsRelation'=>function($query)use($request){
$startChart=\Carbon\Carbon::createFromFormat('Y-m-d',$request->start_chart)->startOfDay();
$endChart=\Carbon\Carbon::createFromFormat('Y-m-d',$request->end_chart)->endOfDay();
$query->wherebetween('timestamp',[$startChart, $endChart]);
}])
->get();