Laravel — как вывести данные из одной таблицы на основе второй?
Пример:
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. Так же можно передать массив для удаления сразу нескольких продуктов из категории
Всё описанное выше работает в обе стороны, т.е. можно таким же образом продукту добавлять и удалять категории(аналогично каждому из примеру, см. первый и второй пример)
Если по нормальному, у Вас должны быть следующие таблицы:categories
id, name, ...products...
id, name...categories_products
category_id, product_id
Должна быть связь has many through и потом уже делаете:foreach($product->categories as $category)