laravel,查询构建器,(或)查询无法按预期工作

时间:2018-02-28 11:23:47

标签: php mysql sql laravel laravel-5

这是我的laravel查询

$Product = Product::select('id','ProductWorkpiece','ProductCategory','ProductName','ProductImage','ProductSubCategory')
        ->where('ProductCategory',$category)
        ->where(function ($query) use ($ProductWorkpiece,$ProductMaterial,$ProductSubCategory,$ProductBrand) {

     foreach($ProductBrand as $key => $ProductBrandd) {
                if (!empty($ProductBrandd) && empty($subcategory)) {
                $query->orWhere('ProductBrand', '=', $ProductBrandd);
                    }
                 foreach($ProductSubCategory as $key => $subcategory) {
                if (!empty($ProductBrandd) && !empty($subcategory)) { 
                  $query->where('ProductSubCategory', '=', $subcategory);
                        }
                    }
                }
    })->where('Status','=','1')->get();

实际上有效,但有一个奇怪的,当我点击1复选框工作,但当我点击2为什么不工作 通过例子 我有一个名为sisma的品牌,有2个产品子类别,名为Laser Marking Machine品牌sisma 当我检查品牌sisma时,出2个产品 当我检查子类别点标记机时,两个项目都丢失了。那是对的 当我检查子类别激光打标机和2时,产品没有出来,当我取消选中点标机的东西出来了 我称之为奇怪,它应该是没有未经检查的可以看到2产品

如果您还不明白,请观看此视频仅需12秒 https://youtu.be/fY417NsZmHI

这是我的手动sql,它运行良好

SELECT * FROM Product WHERE ProductCategory = 'Marking' AND ProductBrand = 'Sisma' and ProductSubCategory = 'Dot Marking Machine' 
or ProductSubCategory = 'Laser Marking Machine' 

$ ProductSubCategory的内容和类型

Array
(
    [0] => Dot Marking Machine
    [1] => Laser Marking Machine
)

$ ProductBrand的内容和类型

Array
(
    [0] => Sisma
)

1 个答案:

答案 0 :(得分:0)

重写这样的查询有助于获得所需的结果组合

$Product = Product::select('id','ProductWorkpiece','ProductCategory','ProductName','ProductImage','ProductSubCategory')
          ->where('ProductCategory',$category)
          ->where('Status', '1')
          ->whereIn('ProductBrand', $ProductBrand)
          ->where(function ($query) use ($ProductWorkpiece,$ProductMaterial,$ProductSubCategory,$ProductBrand) {
              foreach($ProductSubCategory as $key => $subcategory) {
                if (!empty($subcategory)) { 
                  $query->orwhere('ProductSubCategory', '=', $subcategory);
                }
              } })->get();