В обратном порядке Laravel Eloquent загружен коллекции - PullRequest
0 голосов
/ 04 июля 2018

У меня есть коллекция продуктов для определенного заказа, как это -> $ products = $ order-> products () -> with ('store.seller') -> get ();

Я хочу получить коллекцию $ sellersCollection, где каждый продавец имеет $ магазинов каждый $ магазин имеет $ товаров

[$ продавец - магазины - товары]

Как это можно сделать эффективно без повторного вызова БД.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Красноречивым образом вы можете получить желаемый результат как

$sellers = Seller::with('stores.products')->get();

Выше вернут вам всех продавцов с их родственными магазинами и каждый магазин с их родственными продуктами

class Seller extends Model{

    public function stores(){
        return $this->hasMany('App\Store', 'seller_id')
    }

}

class Store extends Model{

    public function products(){
        return $this->hasMany('App\Product', 'product_id')
    }

}

Я считаю, что заказ и продукты связаны как m: m через сводную таблицу, поэтому вы можете определить их отношение как belongsToMany

class Product extends Model{

    public function orders(){
        return $this->belongsToMany('App\Order')
    }

}

Редактировать Я хочу, чтобы конкретные $ продавцы были связаны с только что сделанным заказом и со всей информацией о заказанном продукте, как количество

$sellers = Seller::with(['stores.products.orders' => function ($query) use ($orderId) {
                        $query->where('id', '=', $orderId);
                    }])
                    ->whereHas('stores.products.orders', function ($query) use ($orderId) {
                        $query->where('id', '=', $orderId);
                    })
                    ->get();
0 голосов
/ 04 июля 2018

используя красноречивые отношения, вы можете получить доступ к this.use соответствующим отношениям hasOne () или hasMany () в вашей модели. Продавец-> hasOne (магазин) и магазин-> принадлежат (продавец), как этот.

...