Eloquent GroupBy с отношениями hasManyThrough - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть три модели - Company, Driver, принадлежащие компании, и Order, принадлежащие водителю. Я указал отношения между компаниями и бронированием, как:

public function orders() {
    return $this->hasManyThrough(Order::class, Driver::class);
}

Но! Если я хочу, чтобы все заказы были сгруппированы по компаниям, как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

вы можете сделать Accessor в вашей order модели, чтобы получить 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

0 голосов
/ 18 ноября 2018

У вас есть два способа:

Первый:

$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;
    }
}
...