【问题标题】:Laravel MySQL join tablesLaravel MySQL 连接表
【发布时间】:2020-04-23 13:31:42
【问题描述】:
    $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);

我需要为产品表添加颜色。 我创建了两个表:产品和颜色。 在产品表中有一个值为“1,3,5,6”的字段“Color_id” - 这是颜色表中带有“id”的行。如何获得所有颜色的商品?

【问题讨论】:

  • 为什么用leftjoin为什么不用model之间的关系
  • 使用多对多?

标签: mysql laravel


【解决方案1】:

考虑使用一个名为“product_colors”之类的关系表,而不是使用名为 color_ids 的列,该表将包含 2 个字段“product_id”和“color_id”,然后您可以通过该表在产品和颜色之间引入一个简单的连接,您只需在 product_colors 上加入产品,在 product_colors 上加入颜色并根据需要进行过滤,我认为这种 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 的产品的所有颜色。

希望这个想法有所帮助。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2018-12-25
    • 2015-02-12
    • 2015-07-09
    相关资源
    最近更新 更多