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'];
   }
}

它不再重复,但提供了我想要的结果。