使用laravel和雄辩的orm查询案例

xuo3flqw  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(420)

简单地说,我想从数据库获取具有一定大小的产品
每个产品都有sizes列:其中包含(例如):“xs,m,l”
我做了这个陈述

return DB::table('products')->where([['sizes', 'LIKE', "%".$size."%"]])->paginate(1);

例如,如果$size=“l”,它将获取任何带有“l”或“xl”或“xxl”的产品,这在我的语句中是正常的
我现在问的方法,以取得只有一定的规模

zysjyyx4

zysjyyx41#

我建议在其他表的单独行中使用存储值,以便查询。
尽管你是靠 find_in_setwhereRaw ```
DB::table('products')
->whereRaw("FIND_IN_SET('L',sizes)")
->paginate(1);

jum4pzuy

jum4pzuy2#

如果你想取准确的尺寸,那么你可以试试

return DB::table('products')->where(['sizes',  $size])->paginate(1);

使用 = 而不是 Like .
对于更多的用例,这里有不同的例子。

WHERE sizes LIKE 'L%'   //Finds any values that starts with "L"
WHERE sizes LIKE '%L'   //Finds any values that ends with "L"
WHERE sizes LIKE '%or%' //Finds any values that have "or" in any position
WHERE sizes LIKE '_r%'  //Finds any values that have "r" in the second position
WHERE sizes LIKE 'a_%_%'    //Finds any values that starts with "a" and are at least 3 characters in length
WHERE sizes LIKE 'a%o'  //Finds any values that starts with "a" and ends with "o"

您的代码中也有一个拼写错误
改变这个

return DB::table('products')->where([['sizes', 'LIKE', "%".$size."%"]])->paginate(1);

为了这个

return DB::table('products')->where('sizes', 'LIKE', "%".$size."%")->paginate(1);

希望这有帮助。

相关问题