@aleshka-ne-programmist

Laravel — как вывести данные из одной таблицы на основе второй?

Есть таблица с категориями (id, name, slug):
1 - Категория 1 - Cat1
2 - Категория 2 - Cat2
3 - Категория 3 - Cat3

Есть таблица с продукцией (id, name, cat_id)
1- Пост 1 - 2,6,8
2- Пост 2 - 1,2
3- Пост 3 - 4,7

У каждой продукции прописаны айди категорий через запятую. т.е. cat_id=2,6,8

Как мне при выводе всех значений продукции вывести еще и присвоенные категории?
т.е. на выходе хочу получить список:
  • Продукция 1: Категория 3 (Cat3), Категория 5 (Cat5)
  • Продукция 2: Категория 1 (Cat1), Категория 2 (Cat2)

и так далее

@foreach($products as $product)
{{$product->name}}: <тут категории этой продукции и ее слаги>
@endforeach
  • Вопрос задан
  • 2351 просмотр
Решения вопроса 1
@AlexRudkowskij
Студент
Пример:
https://gist.github.com/AlexeyRudkovskiy/9fb4fcfd3...
В начале каждого файла в комментарии указан путь где он находится.

Далее пишете так:
$product = App\Product::find(1); // Поулчаем запись с id = 1
foreach ($product->categories as $category) {
    // Делаете что хотите с категориями этого товара
}


Тоже самое можно сделать и с категориями:
$category = App\Category::find(1); // Поулчаем запись с id = 1
foreach ($category->products as $product) {
    // Продукты в категории
}


Добавляем запись в категорию:
$product = ...;
$category = App\Category::find(1); // Для примера будем использовать категорию с id = 1
$category->products()->attach($product->id);


Или добавляем несколько записей за раз:
$category = App\Category::find(1); // Для примера будем использовать категорию с id = 1
$category->products()->attach([1, 2, 3]); // Добавляем товары с id = 1, 2, 3 в категорию с id = 1


Удаляем продукты из категории:
$category = App\Category::find(1); // Для примера будем использовать категорию с id = 1
$category->products()->detach(1); // Удаляем продукт с id = 1 из категории с id = 1. Так же можно передать массив для удаления сразу нескольких продуктов из категории


Всё описанное выше работает в обе стороны, т.е. можно таким же образом продукту добавлять и удалять категории(аналогично каждому из примеру, см. первый и второй пример)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@entermix
Если по нормальному, у Вас должны быть следующие таблицы:
categories
id, name, ...

products...
id, name...

categories_products
category_id, product_id

Должна быть связь has many through и потом уже делаете:
foreach($product->categories as $category)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы