我有一张表customers
和一张表orders
。一个客户可以有很多订单。
我正在尝试提出一个查询,以获取每个客户的第一个和最后一个订单。
我的查询如下,使用预先加载,但我只能抓住每个客户的两个订单中的任何一个。
$customers = Customer::with(array('orders' => function($query)
{
$query->orderBy('id','desc');
}))
->with(array('orders' => function($query)
{
$query->orderBy('id', 'asc');
}))
->get();
知道如何在Eloquent中做这件事吗?
答案 0 :(得分:0)
您需要为此指定单独的“帮助”关系:
// Suppose it's Use hasMany Order relation and
public function latestOrder()
{
return $this->hasOne('Order')->orderBy('id', 'desc'); // or instead of orderBy you can use latest() which orders by created_at
}
public function oldestOrder()
{
return $this->hasOne('Order')->orderBy('id', 'asc'); // orderBy here may be omitted, it's just for clarity
}
然后加载它:
$customers = Customer::with('latestOrder', 'oldestOrder')->get();
旁注
不要将这些关系与真正的orders
关系一起使用,因为它浪费了2个查询。如果是这种情况,请改用Collection
方法$customer->orders->first()
和last()
。