我有三个模型-.c
,属于公司的Company
和属于驱动程序的Driver
。我已经说过公司和预订之间的关系,例如:
Order
但是!如果我想获得按公司分组的所有订单,该怎么办?
答案 0 :(得分:0)
您有两种方法:
第一
$companies = Company::with(['orders', 'orders.user'])
->whereHas('orders')
->get();
foreach($companies as $company){
echo $company->id;
foreach($company->orders as $order){
echo $order->driver->id;
echo $order->id;
}
}
第二:
$orders = Orders::with(['driver', 'driver.company'])->get();
$orders = $orders->groupBy(function($order){
return $order->driver->company_id;
});
foreach($orders as $companyId => $group){
foreach($group as $order){
echo $order->id;
echo $oder->driver->id;
echo $order->driver->company->id;
}
}
答案 1 :(得分:0)
您可以在order
模型中创建Accessor以获得company_id
public function getCompanyIdAttriubte(){
return $this->driver->company->id;
}
然后按company_id
获取订单组
$orders = Order::all();
$orders = $orders->groupBy('company_id');
您可以查看这些链接以了解id到底做了什么 https://laravel.com/docs/5.7/collections#method-groupby https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor