在数据库中,我有"类别"和"产品"表。在"产品" 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。
有没有更好的方法,所以不检查所有产品?
答案 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)