这是我的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
)
答案 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();