Eloquent中的急切约束

时间:2014-05-09 14:51:59

标签: php laravel-4 eloquent

我有一张表customers和一张表orders。一个客户可以有很多订单。 我正在尝试提出一个查询,以获取每个客户的第一个和最后一个订单。

我的查询如下,使用预先加载,但我只能抓住每个客户的两个订单中的任何一个。

$customers = Customer::with(array('orders' => function($query)
{
    $query->orderBy('id','desc');

}))
->with(array('orders' => function($query)
{
    $query->orderBy('id', 'asc');

}))
->get();

知道如何在Eloquent中做这件事吗?

1 个答案:

答案 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()