Laravel eloquent 多索引搜索查询
Laravel eloquent multi index search query
我目前遇到了一个问题。我正在尝试根据包含多个玻璃订单的对象使用 Laravel 从数据库中查询结果。
这是我通过前端发送的内容:
{
"order": [
{
"length": "204",
"width": "80",
"height": "5",
"quantity": "2",
},
{
"length": "216",
"width": "80",
"height": "5",
"quantity": "3",
}
]
}
代码示例如下:
$arry=array();
// $countIDs=0;
foreach($request->order as $key=>$insert) {
$length = $request->order[$key]['length'];
$width = $request->order[$key]['width'];
$quantity = $request->order[$key]['quantity']
$glasses = Glass::orderBy('id')->select('id', 'length', 'width', 'height', 'breakage' ,'sold');
$glasses->where('length', '>=', $length)
->where('width', '>=', $width)
->where('height', $height)
// ->where('id', '>', $countIDs) tried this but it doesn't work as expected
->where(function($query){
$query->where('breakage', 'no')
->Where('sold', 'no');
});
// $countIDs+=$quantity;
// Using this array for the frontend (displaying it on a table)
array_push(
$arry,
[
'available_glasses' => $glasses->limit($quantity)->get(),
]
);
}
结果如下:
ID | Glass Code | Length | Width | Height
-------------------------------------------------------
GLASS ORDER 1
1 #gls01 220 100 5
2 #gls02 220 100 5
GLASS ORDER 2
1 #gls01 220 100 5
2 #gls02 220 100 5
3 #gls03 220 100 5
但它 returns 重复(在数据库中我有 10 多个相同尺寸的眼镜)。我希望 'GLASS ORDER 2' 包含 #gls03、#gls04、#gls05。
我怀疑这与从头开始再次查询数据库有关。
问题:
如何确保“GLASS ORDER 2”从“GLASS ORDER 1”停止的地方继续?有没有办法保留搜索查询?
我真的很困惑,非常感谢你的帮助。谢谢
根据新手和许多其他人 (Laracasts) 的评论,我是这样做的:
创建了一个数组来保存玻璃 ID
$ids_to_exclude = array();
在搜索查询中添加了WhereNotIn()
$glasses->where('length', '>=', $length)
->where('width', '>=', $width)
->where('height', $height)
->whereNotIn('id', $ids_to_exclude) // new addition
->where(function($query){
$query->where('breakage', 'no')
->Where('sold', 'no');
});
最后,填充 $ids_to_exclude 数组
$glasses_ids = $glasses->limit($request->obj[$key]['quantity']);
for ($i=0; $i < $request->obj[$key]['quantity']; $i++) {
if (!in_array($glasses_ids->get()[$i]['id'], $ids_to_exclude)) {
$ids_to_exclude[] = $glasses_ids->get()[$i]['id'];
}
}
它不再重复,但提供了我想要的结果。
我目前遇到了一个问题。我正在尝试根据包含多个玻璃订单的对象使用 Laravel 从数据库中查询结果。
这是我通过前端发送的内容:
{
"order": [
{
"length": "204",
"width": "80",
"height": "5",
"quantity": "2",
},
{
"length": "216",
"width": "80",
"height": "5",
"quantity": "3",
}
]
}
代码示例如下:
$arry=array();
// $countIDs=0;
foreach($request->order as $key=>$insert) {
$length = $request->order[$key]['length'];
$width = $request->order[$key]['width'];
$quantity = $request->order[$key]['quantity']
$glasses = Glass::orderBy('id')->select('id', 'length', 'width', 'height', 'breakage' ,'sold');
$glasses->where('length', '>=', $length)
->where('width', '>=', $width)
->where('height', $height)
// ->where('id', '>', $countIDs) tried this but it doesn't work as expected
->where(function($query){
$query->where('breakage', 'no')
->Where('sold', 'no');
});
// $countIDs+=$quantity;
// Using this array for the frontend (displaying it on a table)
array_push(
$arry,
[
'available_glasses' => $glasses->limit($quantity)->get(),
]
);
}
结果如下:
ID | Glass Code | Length | Width | Height
-------------------------------------------------------
GLASS ORDER 1
1 #gls01 220 100 5
2 #gls02 220 100 5
GLASS ORDER 2
1 #gls01 220 100 5
2 #gls02 220 100 5
3 #gls03 220 100 5
但它 returns 重复(在数据库中我有 10 多个相同尺寸的眼镜)。我希望 'GLASS ORDER 2' 包含 #gls03、#gls04、#gls05。 我怀疑这与从头开始再次查询数据库有关。
问题: 如何确保“GLASS ORDER 2”从“GLASS ORDER 1”停止的地方继续?有没有办法保留搜索查询?
我真的很困惑,非常感谢你的帮助。谢谢
根据新手和许多其他人 (Laracasts) 的评论,我是这样做的:
创建了一个数组来保存玻璃 ID
$ids_to_exclude = array();
在搜索查询中添加了WhereNotIn()
$glasses->where('length', '>=', $length)
->where('width', '>=', $width)
->where('height', $height)
->whereNotIn('id', $ids_to_exclude) // new addition
->where(function($query){
$query->where('breakage', 'no')
->Where('sold', 'no');
});
最后,填充 $ids_to_exclude 数组
$glasses_ids = $glasses->limit($request->obj[$key]['quantity']);
for ($i=0; $i < $request->obj[$key]['quantity']; $i++) {
if (!in_array($glasses_ids->get()[$i]['id'], $ids_to_exclude)) {
$ids_to_exclude[] = $glasses_ids->get()[$i]['id'];
}
}
它不再重复,但提供了我想要的结果。