Всем привет. Пишу сайт на laravel, но столкнулся с проблемой:
### У меня есть:
1. Запчасти
2. Бренды
3. Категории
# Запчасти имеют связи:
1. belongsTo (Бренды)
2. belongsToMany(PartCategory::class, 'pivot_part_categories', 'part_id', 'category_id' );
# Бренды имеют связь:
1. hasMany(Part::class)
# Категории имеют связь:
1. belongsToMany(Part::class, 'pivot_part_categories', 'category_id', 'part_id');
Классический вывод каталога построил, показать все запчасти, где бренд такой-то сделал.
# Не пойму, как сделать такой каталог:
Нажимаем на какой-то бренд, затем показываем все категории товаров, которые принадлежат запчастям, у которых бренд == выбранному(по которому нажали)
# Примеры того, что мне нужно:
# Что я уже сделал и как пытался решить вопрос:
---------------------------------------------------------------
Мои routes имеют вид:
Route::get('/part/{slug}', 'Parts\PartController@show')->name('part.show');
Route::get('/category/{slug}', 'Parts\CategoryController@show')->name('category.show');
Route::get('brands/{brand}/{category?}', ['as' => 'brands.cats', 'uses' => 'Parts\BrandController@partsByBrand', function($brand = null, $category = null){}]);
Написал такой метод partsByBrand():
public function partsByBrand($brand, $category)
{
$brand = $this->findBrandBySlug($brand); // Получил бренд
$parts = Part::with('categories')->where('parts.brand_id','=', $brand->id)->get(); // Получил запчасти привязанные к бренду и категорию каждой запчасти
return $parts;
}
Не пойму куда плясать дальше.
Я могу создать пустой массив категорий, перебрать все категории в цикле(текущих товаров и передать их во view, чтобы они открывались по такому маршруту:
Route::get('brands/{brand}/{category?}', ['as' => 'brands.cats', 'uses' => 'Parts\BrandController@partsByBrand', function($brand = null, $category = null){}]);
Далее, проверять, что если есть категория, получаю все товары, где категория и бренд равен N, но мне кажется, что это плохое решение, смущает количество запросов для вывода каталога + правильность данного решения, + как это будет работать, когда запчастей будет более 2 млн.
+ Мне по одному маршруту нужно отобразить несколько разных view, когда я сначала показываю найденные категории, а затем товары в этих категориях,
это делается просто через if() или есть решение получше?