Laravel MySQL объединение таблиц - PullRequest
0 голосов
/ 23 апреля 2020
    $products= DB::table('products')
        ->leftJoin('categoryables', 'categoryables.categoryable_id', '=', 'products.id')
        ->leftJoin('categories', 'categoryables.category_id', '=', 'categories.id')
        ->leftJoin('brands', 'products.brand_id', '=', 'brands.id')

        ->leftJoin('colors', 'products.color_id', '=', 'colors.id')   //'products.color_id' = "1,3,5,6"

        ->whereIn('categoryables.category_id', $categories)
        ->select('products.*','categories.path', 'categories.title', 'brands.name_brand',
            DB::raw("GROUP_CONCAT(colors.name_color) as name_colors"),
            DB::raw("GROUP_CONCAT(colors.img_color) as img_colors")
        )
        ->groupBy('products.id','categories.path','categories.title')
        ->paginate(5);

Мне нужно добавить цвета в таблицу продуктов. Я создал две таблицы: продукты и цвета. В таблице товаров есть поле «Color_id» со значением «1,3,5,6» - это строка с «id» из таблицы цветов. Как получить все товары с их цветами?

1 Ответ

0 голосов
/ 23 апреля 2020

Вместо того, чтобы иметь столбец с именем color_ids, рассмотрите возможность использования таблицы отношений, называемой чем-то вроде «product_colors», которая будет иметь 2 поля «product_id» и «color_id», и затем вы можете просто ввести соединение между продуктами и цветами через эту таблицу. объединяйте продукты в product_colors, а также объединяйте цвета в product_colors и фильтруйте по любому, что вам нужно, я думаю, что эта структура БД имеет больше смысла и является более нормализованной и более простой в использовании в classi c sql stuff:)

SELECT 
  * 
FROM 
  products 
JOIN product_colors ON product_colors.product_id = products.id
JOIN colors ON colors.id = product_colors.id
WHERE
  products.id = 1234;

Или что-то вроде этого, в основном даст вам все цвета для продукта с идентификатором 1234.

Надеюсь, эта идея поможет.

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