我正在尝试添加for loop
来向我的查询添加条件,并在undefined offset 1
上返回$ProductSubCategory
错误。 $ProductSubCategory
的内容是我想要作为条件包含的字符串数组。
$Product = Product::select('id','ProductWorkpiece','ProductCategory','ProductName','ProductImage','ProductSubCategory')
->where('Status','=','1')
->Where(function ($query) use ($ProductSubCategory) {
for ($i=1; $i <= $ProductSubCategory ; $i++) {
$Product->where('ProductSubCategory', '=', $ProductSubCategory[$i]);
}
})->get();
https://pastebin.com/uDSywsQv(Laravel Query Builder代码段)
这是我想使用Laravel的查询构建器复制的MySQL查询,我将如何进行此操作?
SELECT
`id`,
`ProductWorkpiece`,
`ProductCategory`,
`ProductName`,
`ProductImage`,
`ProductSubCategory`
FROM
`Product`
WHERE
`ProductSubCategory` = 'Laser Marking Machine' OR
`ProductSubCategory` = 'Dot Marking Machine' OR
`ProductSubCategory` = 'Digital Microscope' AND
`Status` = '1'
https://pastebin.com/AMWCz32g(所需的MySQL代码段)
答案 0 :(得分:0)
查看此$ProductSubCategory
不是数组,也不具有1
索引。根据{{1}}的内容,您可以使用一些方法。
解决方案1:$ ProductSubCategory是一个字符串数组
$ProductSubCategory
在这里你可以使用$Product = Product::select('id','ProductWorkpiece','ProductCategory','ProductName','ProductImage','ProductSubCategory')
->where('Status','=','1')
->whereIn('ProductSubCategory', $ProductSubCategory)
->get();
并指定字符串数组,不需要循环任何东西。
解决方案2.1:$ ProductSubCategory是记录的对象集合
whereIn()
在这里,我们使用$Product = Product::select('id','ProductWorkpiece','ProductCategory','ProductName','ProductImage','ProductSubCategory')
->where('Status','=','1')
->where(function ($query) use ($ProductSubCategory) {
foreach($ProductSubCategory as $subcategory) {
$query->orWhere('ProductSubCategory', '=', $subcategory->name);
}
})->get();
遍历每个对象记录,然后使用foreach
而非name
orWhere
字段
$ subcategory-&gt; name用作占位符,使用适用于您的字段名称。
注意在您的版本中,您执行了WHERE foo = bar AND foo = bar2 AND foo = bar3
,但后来引用了function($query)
而不是$Product
来执行您的where子句。
修改/更新
解答2.2:$ ProductSubCategory是记录的对象集合$query
这与解决方案1相同,只是我们使用收集方法$subCategories = $ProductSubCategory->only('name')->toArray();
$Product = Product::select('id','ProductWorkpiece','ProductCategory','ProductName','ProductImage','ProductSubCategory')
->where('Status','=','1')
->whereIn('ProductSubCategory', $subCategories)
->get();
仅检索only()
字段(相应地更改),然后转换名称name
,它可以用作toArray()
条件的一部分。 这是我未经测试的,但应该在理论上工作
我知道whereIn
的内容和类型会更有帮助。
答案 1 :(得分:0)
内置tou循环$ Product无法访问尝试使用$ query替换:
$ query-&gt; where(&#39; ProductSubCategory&#39;,&#39; =&#39;,$ ProductSubCategory [$ i]);