【发布时间】:2015-08-13 14:39:12
【问题描述】:
我有一个订单和一个产品模型。"Order" HasMany 产品(和产品属于订单)...
假设我想展示我订单的 3 件产品,该怎么做?
我知道第一个可以像$order->products->first() 一样被检索...但是如何检索第二个和第三个产品?
我试过$order->products->find(1),但“1”代表产品的ID...我不想知道...
【问题讨论】:
我有一个订单和一个产品模型。"Order" HasMany 产品(和产品属于订单)...
假设我想展示我订单的 3 件产品,该怎么做?
我知道第一个可以像$order->products->first() 一样被检索...但是如何检索第二个和第三个产品?
我试过$order->products->find(1),但“1”代表产品的ID...我不想知道...
【问题讨论】:
你可以试试这个:
$order->products->take(3)->get();
【讨论】:
$order->products->take(3)->select('name')->get()
我终于找到了解决办法,这是正确的语法:
$order->products->get(0)->name; will return the first record
$order->products->get(1)->name; will return the second record
$order->products->get(2)->name; will return the third record
等等……
【讨论】:
$order->products()->skip(1)->first();//Second row
$order->products()->skip(2)->first();//Third row
....
比加载所有产品并只获取第一、第二、ecc..
如果你想要第二个和第三个,你可以在一个查询中只获取它们而不加载其他行,使用类似的方法:
$order->products()->skip(1)->take(2)->get(); //Skip first, take second and third
【讨论】:
假设您想要来自Eloquent Collection 的第二个产品
如果您确定数组键与数组索引相同,请执行此操作
$order->products->get(1)->name;
如果您需要第二个项目并且您不确定数组键,请执行此操作
$order->products->slice(1, 1)->first()->name;
【讨论】:
$order->products()->skip(1)->take(1)->first(); //Second row
$order->products()->skip(2)->take(1)->first(); //Third row
$order->products()->orderBy('salary','desc')->skip(1)->take(1)->first(); //Second highest salary row
$order->products()->orderBy('salary','desc')->skip(2)->take(1)->first(); //Third highest salary row
【讨论】: