Php 口若悬河
我有一个表Php 口若悬河,php,laravel-4,eloquent,Php,Laravel 4,Eloquent,我有一个表客户和一个表订单。一个客户可以有多个订单。 我试图提出一个查询,为每个客户获取第一个和最后一个订单 $customers = Customer::with(array('orders' => function($query) { $query->orderBy('id','desc'); })) ->with(array('orders' => function($query) { $query->orderBy('id', 'asc')
客户
和一个表订单
。一个客户可以有多个订单。
我试图提出一个查询,为每个客户获取第一个和最后一个订单
$customers = Customer::with(array('orders' => function($query)
{
$query->orderBy('id','desc');
}))
->with(array('orders' => function($query)
{
$query->orderBy('id', 'asc');
}))
->get();
我的查询如下所示,使用急切加载,但我只能为每个客户获取两个订单中的任何一个
$customers = Customer::with(array('orders' => function($query)
{
$query->orderBy('id','desc');
}))
->with(array('orders' => function($query)
{
$query->orderBy('id', 'asc');
}))
->get();
您知道如何以雄辩的方式进行吗?您需要为此指定单独的“助手”关系:
// 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();
旁注
不要将这些关系与真实的订单
关系一起使用,因为这会浪费两个查询。如果是这种情况,请使用Collection
方法$customer->orders->first()
和last()