如何在Laravel中获得类似的产品标签?

时间:2018-04-19 09:34:45

标签: mysql laravel laravel-5

我有产品表,每个产品都有以这种方式存储的标签

“tag1,tag2,tag3”(字符串)

现在当我展示产品时 - 我想显示所有产品都有与当前产品相关的任何标签

例如

product1 -> tags (tag1,tag2,tag3)
product2 -> tags (tag3,tag4,tag5)
product3 -> tags (tag4,tag5,tag6)

例如在产品1中 - >它应该捕获产品2,因为它具有相同的标签(tag3)

不幸的是我没有写任何代码 - 我不确定如何实现它

1 个答案:

答案 0 :(得分:1)

是的,你可以用艰难的方式实现这一目标。如果您使数据库更好,那么实现任何类型的搜索都会有所帮助。您可以创建两个表

1) Products (column :- id, name) 2) product_tags(column :- id, product_id, tag_name)

使用此结构,您可以获取任何类型的产品。

如果您不想使用上述部分,请根据您的要求进行尝试。现在我假设您在产品表中有三条记录如下: -

ID product_name  product_tags
1   product1       tag1,tag2,tag3
2   product2       tag3,tag4,tag5
3   product3       tag4,tag5,tag6

现在根据您的要求,您在网页上显示Product1,可能是您正在展示类似的代码产品。 所以你的逻辑将是这样的: -

$productDetail = Product:where('product_name','product1')->first();  // this query will return tags of `product1`
 $productDetail = json_decode(json_encode($productDetail),true); //convert to array
if(!empty($productDetail)){
   $producttags = explode(',',$productDetail['product_tags']);
   $productids = array();
   foreach($producttags as $tag){
       $getproducts = Product::whereRaw("find_in_set($tag,product_tags)")->get();
      $getproducts= json_decode(json_encode($getproducts),true);
      if(!empty($getproducts)){
          foreach($getproducts as $product){
               $productids[] = $product['id'];
           }
       }
    }
   $productids = array_unique($productids);
  }
  echo "<pre>"; print_r($productids); // print the productids here and after that use `whereIn` for fetcch tag product ids

希望它有所帮助!祝你的项目好运