拉雅维·埃尔昆特得到了每n个关系



我正在从模型中查询一个关系,但由于我想将该关系返回的行数限制为一个集合数(在本例中为18(,所以我已经映射了该关系。

$sensors = Sensor::where('building_id', $request->building_id)->with('data_sensor')->get()->map(function($sensor) {
$sensor->setRelation('data_sensor', $sensor->data_sensor->sortByDesc('created_at')->take(18)->values());
return $sensor;
});

这很好用。然而,我试图获得关系的每n行,在这个例子中,我想要每6行。

我已经尝试了以下操作(添加了whereRaw(,但这给出了一个错误,即whereRave方法不存在。

$sensors = Sensor::where('building_id', $request->building_id)->with('data_sensor')->get()->map(function($sensor) {
$sensor->setRelation('data_sensor', $sensor->data_sensor->sortByDesc('created_at')->whereRaw( DB::raw('(`id`) % 6 != 0') )->take(18)->values());
return $sensor;
});

我如何获得关系的每n个,并有一个限制,这样它就不会返回关系的所有行?

您正试图在集合中使用querybuilder方法,这就是错误的原因。

试试这个:

$sensors = Sensor::where('building_id', $request->building_id)
->with('data_sensor')
->get()
->map(function($sensor) {
$sensor->setRelation(
'data_sensor', 
$sensor->data_sensor->sortByDesc('created_at')->filter(function($s) { return $s->id % 6 != 0; })->take(18)->values());
return $sensor;
});

最新更新