使用 whereIn 和 where in Laravel eloquent 查询生成器

Using whereIn and where in Laravel eloquent query builder

我一直在尝试使用 laravel eloquent 查询生成器进行查询,但没有成功。

这就是我想要实现的目标:我有一个带笔记本电脑的网上商店。人们可以按品牌、屏幕直径和处理器进行搜索。我的 table 名为 'laptops',列为 'specsTag'、'screen_diameter' 和 'processor'。 我正在使用复选框。所以请求是一个数组,可能看起来像

['HP','Apple', '12 inch', 'Intel Core M']

首先我想将数组中的所有品牌作为一个集合,并使用数组中的值相应地过滤它们。

我尝试了几件事。 IE。尝试搜索屏幕直径。

非常感谢您的建议。

这是我最近的尝试:

$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)) ◀"

你可以试试这个

$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` = ?)