在Laravel雄辩的查询生成器中使用whereIn和where

时间:2018-08-11 07:05:17

标签: laravel eloquent where-in

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

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

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

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

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

建议非常感谢。

2 个答案:

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