Laravel 5 - 如何查询DB值是否为数组

时间:2017-01-12 02:14:29

标签: laravel-5 laravel-query-builder

在数据库中,我有"类别"和"产品"表。在"产品" table,有一个category_ids列,它是一个数组,因为该产品有多个类别。

我想要的是查询category_ids为1的产品。我试图这样做,它是有效的,但我想要一种更简单的方法。

$catId = 1; //category ID
$allProducts = Product::all(); // get all products
foreach ($allProducts as $product) { //loop all the products
  if(in_array($catId, $product->category_ids)) { // check if category ID is in array of its product categories
    $products[] = Product::find($product->id);
  }
}

如您所见,我必须遍历所有产品以检查产品类别数组中是否存在类别ID。

有没有更好的方法,所以不检查所有产品?

1 个答案:

答案 0 :(得分:0)

除了一行外,所有代码都可以。

$catId = 1; //category ID
$allProducts = Product::all(); // get all products
foreach ($allProducts as $product) { //loop all the products
    $cats = explode(',',$product->category_ids);  
    if(in_array($catId, $cats)) { // check if category ID is in array of its product categories
        $products[] = Product::find($product->id);
    }
}

我添加了这一行。我假设产品的多个类别将以逗号分隔存储在单个字段中(虽然它不是正确的方法,但您需要创建一个M2M表)

$cats = explode(',',$product->category_ids); 

所以在in_array函数中,第二个元素应该是一个数组。由于爆炸的输出,$ cats是一个数组。

 in_array($catId, $cats)