我一直在尝试使用laravel雄辩的查询生成器进行查询,但是没有成功。
这是我要实现的目标:我有一个带笔记本电脑的网上商店。人们可以按品牌,屏幕直径和处理器进行搜索。我的表称为“笔记本电脑”,具有“ specsTag”,“ screen_diameter”和“ processor”列。 我正在使用复选框。因此,请求是一个数组,可能看起来像
['HP','Apple', '12 inch', 'Intel Core M']
首先,我想将数组中的所有品牌作为一个集合,并使用数组中的值对它们进行相应的过滤。
我尝试了几件事。即尝试搜索屏幕直径。
建议非常感谢。
答案 0 :(得分:0)
这是我最近的尝试:
$laptops = Laptop::whereIn('specsTag',$requestArray)->where('screen_diameter', function($query) use ($requestArray)
{
foreach($requestArray as $item){
$query->where('screen_diameter','=',$item,'or');
}
})->get();
I'm getting an error from my DB:
"SQLSTATE[HY000]: General error: 1096 No tables used (SQL: select * from `laptops` where `specsTag` in (ASUS, 12 inch) and `screen_diameter` = (select * where `screen_diameter` = ASUS or `screen_diameter` = 12 inch)) ◀"
答案 1 :(得分:0)
您可以尝试
$laptops = Laptop::whereIn('specsTag',$requestArray)->where(function($query) use ($requestArray){
foreach($requestArray as $item){
$query->orWhere('screen_diameter','=',$item);
}
})->get();
假设您有$requestArray
这样的人
$requestArray = ['HP','Apple' '12 inch', 'Intel Core M'];
您将获得这样的sql
select * from `laptops` where `specsTag` in (?, ?, ?, ?) and (`screen_diameter` = ? or `screen_diameter` = ? or `screen_diameter` = ? or `screen_diameter` = ?)