Laravel 关系,select 数据库中的下一个评分行。
Laravel relations, select next raleted row from database.
我的数据库中有相关项目。我 select 通过相关 ID 从数据库中编辑了所有项目:
$next_stock = $this->model->get()->where('part_id', $in_data['part_id'])->all();
和我 collection 的行按一个特定的 id 分组,如图所示。所有这些 select 编辑者 "part_id":
Selection Of Items
Grouped By Same Id
此外,通过这行代码,我可以 select 来自 collection:
的项目之一
$next_stock = $this->model->get()->where('id', $old_stock['id'])->where('part_id', $in_data['part_id'])->first();
但是我怎样才能 select 这一项之后的后续项目呢?
或者,我怎样才能 select 此收藏中的第二个或第三个项目?
我不能从一开始就把 id 号加一个,因为有时这个项目的 id 不会互相跟随。
有一个collection,你可以通过take()
和last()
的组合在该位置取一个特定的元素。
$collection = $this->model->get()->where('part_id', $in_data['part_id'])->all();
$second = $collection->take(2)->last(); //if this doesnt work, do it in 2 steps
$third = $collection->take(3)->last(); //if this doesnt work, do it in 2 steps
如果你没有collection,像这样直接从数据库中获取
$second = $this->model
->where('part_id', $in_data['part_id'])
->skip(1)
->first();
如果它不适用于 first()
$collect = $this->model
->where('part_id', $in_data['part_id'])
->skip(1)
->take(1)
->get();
$second = $collect->first();
编辑
skip() 和 take() 实际上是查询生成器的一部分,而不是 eloquent 模型。所以它不适用于 Eloquent in Laravel 5.4
试试
$collect = $this->model
->where('part_id', $in_data['part_id'])
->get(1); //For the second record, 0 being the first
如果您还没有这样做,您应该设置模型的关系。
例如。如果您使用 "one-to-many",Eloquent 将自动为您确定模型上正确的外键列。
$parts = App\Stock::find(1)->partId;
foreach ($parts as $part) {
//
}
我的数据库中有相关项目。我 select 通过相关 ID 从数据库中编辑了所有项目:
$next_stock = $this->model->get()->where('part_id', $in_data['part_id'])->all();
和我 collection 的行按一个特定的 id 分组,如图所示。所有这些 select 编辑者 "part_id":
Selection Of Items
Grouped By Same Id
此外,通过这行代码,我可以 select 来自 collection:
的项目之一$next_stock = $this->model->get()->where('id', $old_stock['id'])->where('part_id', $in_data['part_id'])->first();
但是我怎样才能 select 这一项之后的后续项目呢? 或者,我怎样才能 select 此收藏中的第二个或第三个项目?
我不能从一开始就把 id 号加一个,因为有时这个项目的 id 不会互相跟随。
有一个collection,你可以通过take()
和last()
的组合在该位置取一个特定的元素。
$collection = $this->model->get()->where('part_id', $in_data['part_id'])->all();
$second = $collection->take(2)->last(); //if this doesnt work, do it in 2 steps
$third = $collection->take(3)->last(); //if this doesnt work, do it in 2 steps
如果你没有collection,像这样直接从数据库中获取
$second = $this->model
->where('part_id', $in_data['part_id'])
->skip(1)
->first();
如果它不适用于 first()
$collect = $this->model
->where('part_id', $in_data['part_id'])
->skip(1)
->take(1)
->get();
$second = $collect->first();
编辑
skip() 和 take() 实际上是查询生成器的一部分,而不是 eloquent 模型。所以它不适用于 Eloquent in Laravel 5.4
试试
$collect = $this->model
->where('part_id', $in_data['part_id'])
->get(1); //For the second record, 0 being the first
如果您还没有这样做,您应该设置模型的关系。 例如。如果您使用 "one-to-many",Eloquent 将自动为您确定模型上正确的外键列。
$parts = App\Stock::find(1)->partId;
foreach ($parts as $part) {
//
}