【发布时间】:2021-07-08 22:30:44
【问题描述】:
【问题讨论】:
标签: mysql laravel e-commerce
【问题讨论】:
标签: mysql laravel e-commerce
如果数据库被规范化,标签将在它们自己的表中。但既然你有这样的产品,我假设你得到的产品是这样的:
$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();
【讨论】:
如果您想对标签执行任何形式的有意义的查询,以这种方式存储标签并不实际。
相反,您应该考虑将标签移动到单独的表中,或者作为一对多关系(一个产品有很多标签),或者作为多对多关系,在产品之间共享标签。这将允许您执行各种聚合查询,例如您想要的分组。
一对多
| tags |
|---|
| id |
| product_id |
| name |
多对多
| tags |
|---|
| id |
| name |
| product_tag |
|---|
| product_id |
| tag_id |
@IGP 的回答也同样有效,具体取决于您希望聚合发生的位置,无论是在 PHP 客户端中,还是在实际的数据库查询中。
【讨论】: