雄辩的GroupBy具有hasManyThrough关系

时间:2018-11-18 10:12:51

标签: laravel group-by eloquent has-many-through

我有三个模型-.c,属于公司的Company和属于驱动程序的Driver。我已经说过公司和预订之间的关系,例如:

Order

但是!如果我想获得按公司分组的所有订单,该怎么办?

2 个答案:

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

相关问题