【问题标题】:How can I show all tags from product table in laravel, when all tags are in products table? [closed]当所有标签都在产品表中时,如何在 laravel 中显示产品表中的所有标签? [关闭]
【发布时间】:2021-07-08 22:30:44
【问题描述】:

这是一个电子商务项目,我将产品标签存储在产品表中。 在数据库中,所有标签都以逗号分隔存储。但是如何使用 groupBy 显示视图中的所有标签??

【问题讨论】:

    标签: mysql laravel e-commerce


    【解决方案1】:

    如果数据库被规范化,标签将在它们自己的表中。但既然你有这样的产品,我假设你得到的产品是这样的:

    $products = Product::get();
    

    如果是这样,您仍然可以通过使用一些收集方法来获取所有不同的标签。

    $tags_en = $products->map(fn($product) => explode(',', $product->product_tag_en))
                        ->flatten()
                        ->unique()   // avoid repeating tags
                        ->sort()     // optional
                        ->values();
    
    $tags_bn = $products->map(fn($product) => explode(',', $product->product_tag_bn))
                        ->flatten()
                        ->unique()   // avoid repeating tags
                        ->sort()     // optional
                        ->values();
    

    【讨论】:

    • 运行良好。非常感谢@IGP
    【解决方案2】:

    如果您想对标签执行任何形式的有意义的查询,以这种方式存储标签并不实际。

    相反,您应该考虑将标签移动到单独的表中,或者作为一对多关系(一个产品有很多标签),或者作为多对多关系,在产品之间共享标签。这将允许您执行各种聚合查询,例如您想要的分组。

    一对多

    tags
    id
    product_id
    name

    多对多

    tags
    id
    name
    product_tag
    product_id
    tag_id

    @IGP 的回答也同样有效,具体取决于您希望聚合发生的位置,无论是在 PHP 客户端中,还是在实际的数据库查询中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-16
      • 2023-03-31
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      相关资源
      最近更新 更多