codeigniter 我有一个问题,在我的PHP代码循环

jaxagkaj  于 8个月前  发布在  PHP
关注(0)|答案(1)|浏览(40)
public function addToTransfer($data)
    {

        $countProductsAdded = $this->where('product_id', $data['product_id'])
                ->where('product_transfer_id', $data['product_transfer_id'])
                ->where('transfer_id', $data['transfer_id'])
                ->countAllResults();
        
        for($i = $countProductsAdded; $i < $data['quantity']; $i++) {
            

            $dataToUpdate = [
                'transfer_id' => $data['transfer_id'],
                'product_transfer_id' => $data['product_transfer_id'],
                'status' => $data['status'],
                'warehouse' => $data['new_warehouse']
            ];
            
            $response = $this->set($dataToUpdate)
                ->where('product_id', $data['product_id'])
                ->where('status', 'instock')
                ->where('warehouse', $data['old_warehouse'])
                ->update();

        }
        return $response;
    }

你好,我有一个问题,这个循环,我不明白什么可能是错的这里是一个黑盒子,现在我不明白什么是错的。
我会解释我检查了什么。
1.$countProductsAdded -正确返回(它正在计算数据库中已添加的结果)
1.$data ['quantity'] -正确返回(我想运行那个循环多少次)
我所期望的是,我调用quantity = 5的循环,我期望运行5次并从数据库中更新5行,这符合一些标准。
我得到的,完全不同:)),是从数据库中更新所有符合这些标准的行。
这对我来说是无法理解的,因为同样的循环,同样的逻辑也适用于插入调用
顺便说一句,这是php,codeigniter 4

wa7juj8i

wa7juj8i1#

好了,伙计们,我发现了,基本上,我停止使用for循环,并尝试其他方法,我将在这里举个例子,也许它会帮助别人作为一个实际的例子

public function addToTransfer($data)
{
    $countProductsAdded = $this->where('product_id', $data['product_id'])
        ->where('product_transfer_id', $data['product_transfer_id'])
        ->where('transfer_id', $data['transfer_id'])
        ->countAllResults();

    $rowsToSelect = $data['quantity'] - $countProductsAdded; 
    if ($rowsToSelect > 0) {     

        $query = $this->select('*')
            ->where('product_id', $data['product_id'])
            ->where('status', 'instock')
            ->where('warehouse', $data['old_warehouse'])
            ->limit($rowsToSelect)
            ->get(); // Get the query instance

        $rowsToUpdate = $query->getResultArray();
        
        $updatedRowCount = 0;
        foreach ($rowsToUpdate as $row) {
            $this->set([
                'transfer_id' => $data['transfer_id'],
                'product_transfer_id' => $data['product_transfer_id'],
                'status' => $data['status'],
                'warehouse' => $data['new_warehouse']
            ])
            ->where('id', $row['id'])
            ->update();
        
            $affectedRows = $this->affectedRows();
            if ($affectedRows > 0) {
                $updatedRowCount++;
                $updatedRowIds[] = $row['id'];
            }    
        }
        return ['updated_rows' => $updatedRowCount, 'updated_rows_ids' => $updatedRowIds];
    } 
    else{
        return ['updated_rows' => 0, 'updated_rows_ids' => false];
    }  
}

相关问题