Laravel Left объединяет несколько таблиц и возвращает исходное значение таблицы - PullRequest
0 голосов
/ 26 ноября 2018

У меня проблемы с объединением трех таблиц и получением исходного значения таблицы.

У меня есть родительская таблица, которая является магазином, которому нужно найти brand_id для продуктов в магазине.Я не могу получить доступ к brand_id напрямую, поэтому мне нужно присоединиться, я должен присоединиться к списку товаров в магазинах, а затем присоединить его к таблице товаров, которая содержит brand_id.

$this_return = Store::with('address','setting')
                    ->leftjoin('StoreProducts', function ($join){
                        $join->on('StoreProducts.store_id', '=', 'stores.id');
                    })->leftjoin('products', function ($join) {
                        $join->on('products.id','=','StoreProducts.product_id');
                })
                ->where('products.brand_id', '=', $brandID)
                ->isActive()
                ->get();

Это возвращаетсязначение продукта, но я хотел, чтобы он возвращал все магазины исходной таблицы обратно, если products.brand_id был равен $brandID, затем возвращал текущий магазин и повторял для всех магазинов.

Надеюсь, что имеет смыслЛюбая помощь будет великолепна.

1 Ответ

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

Я думаю, что ваши отношения выглядят так:

Stores -> (n*n)StoreProducts -> Products -> (n*1)Brands

, который StoreProducts является объединяющей таблицей между Stores и Products.С этим предположением я бы использовал что-то вроде этого:

В модели Store,

public function products(){
    return $this->belongsToMany(\App\Product::class, "store_products"); 
}

В модели Products,

public function stores(){
    return $this->belongsToMany(\App\Store::class, "store_products");
}

Вмодель StoreProducts,

public function store(){
    return $this->belongsTo(\App\Store::class);
}

public function product(){
    return $this->belongsTo(\App\Product::class);
}

Таким образом, создаются отношения.Тогда вы можете использовать что-то вроде этого:

$stores = \App\Store::whereHas("products", function($q) use ($brandId){
    return $q->where("brand_id", $brandId);
});

Это даст вам магазины, в которых существует бренд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...