Laravel关系,从数据库中选择下一个raleted行。

时间:2017-03-23 05:42:34

标签: php mysql laravel laravel-5 laravel-query-builder

我的数据库中有相关项目。我通过相关的id选择了数据库中的所有项目:

$next_stock = $this->model->get()->where('part_id', $in_data['part_id'])->all();

和我按一个特定id分组的行集合,如图片所示。所有这些都是由" part_id":

选择的

Selection Of Items

Grouped By Same Id

使用这行代码,我可以从这个系列中选择一个项目:

$next_stock = $this->model->get()->where('id', $old_stock['id'])->where('part_id', $in_data['part_id'])->first();

但如何在此之后选择以下项目? 或者,我如何从此收集中选​​择第二个或第三个项目?

我不能只从头开始将id增加一,因为有时这个项目不会互相跟随。

2 个答案:

答案 0 :(得分:1)

拥有一个集合,您可以使用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

如果您没有收藏品,请直接从数据库中取出

$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()实际上是查询构建器的一部分,而不是雄辩的模型。所以它不适用于Laravel 5.4中的Eloquent

尝试

$collect = $this->model
->where('part_id', $in_data['part_id'])
->get(1); //For the second record, 0 being the first

答案 1 :(得分:0)

如果你还没有这样做,你应该设置模型的关系。 例如。如果您使用“一对多”,Eloquent将自动为您确定模型上正确的外键列。

$parts = App\Stock::find(1)->partId;

foreach ($parts as $part) {
    //
}