$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"的一行。如何获得所有颜色的商品?
与其有一个名为color_ids的列,不如考虑有一个类似于"product_colors"的关系表,它将有两个字段"product_id"one_answers"color_id",然后你可以通过该表在产品和颜色之间引入一个简单的连接,你只需连接product_color上的产品,我认为这种DB结构更有意义,更规范化,更容易在经典的sql中使用:(
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;
或者类似的东西,基本上会给你id为1234的产品的所有颜色。
希望这个想法能有所帮助。