Codeigniter db->where() 在 foreach 循环中不起作用



在我看来,我需要能够获取隐藏的banner_image_id并在模型函数的$this->db->where('banner_image_id', $id)中使用它

当我更新图像时。它不会更新到正确的行。相反,它会使用相同的文件名更新所有行。

问:在我的模型上,如何确保我的$this->db->where('banner_image_id', $id)更新正确的行。

我已经做了一个 vardump($id),结果是 string(2) "63" 这是正确的,但仍然以相同的方式更新每一行。我试过update_batch也没有运气。

模型函数

public function edit_banner_image($file_name) {
    $banner_image_id = $this->input->post('banner_image_id');
    if (isset($banner_image_id)) {
        foreach ($banner_image_id as $id) { 
            //var_dump($id);
            //exit;
            $data = array('banner_id' => $this->uri->segment(4),'banner_image' => $file_name);
            $this->db->where('banner_image_id', $id);
            //$this->db->where_in('banner_image_id', $id); // Tried No Luck
            //$this->db->or_where_in('banner_image_id', $id); // Tried No Luck
            $this->db->update($this->db->dbprefix . 'banner_img', $data);
        }
    }
}   

查看表格

<table>
    <tbody>
        <?php foreach ($banner_images as $img) { ?>
        <tr>
            <td>
                <?php echo $img['banner_image_id'];?>
                <input type="hidden" name="banner_image_id[]" value="<?php echo $img['banner_image_id'];?>">
           </td>
           <td>
                <input type="file" name="banner_image[]" multiple size="20">
           </td>
           <td>
               <img src="<?php echo base_url() . 'uploads/' . $img['banner_image'];?>" />
               <input type="hidden" name="banner_image" value="<?php echo $img['banner_image'];?>">
           </td>
       </tr>
       <?php }?>
    <tbody>
</table>

尝试连接 foreach 循环中的 id 号,并立即将其传递给 where 函数。

假设您的身份证号码array(1,2,5,6) .

public function edit_banner_image($file_name) {
    $banner_image_id = $this->input->post('banner_image_id');
    if (isset($banner_image_id)) {
        $bid = 'IN(';
        foreach ($banner_image_id as $id) { 
            $bid .= $id . ',';
        }
        $bid = substr($bid, 0, -1) . ')'; //remove last comma and add closing paranthesis.
        //The content of the variable $bid would be like
        //IN(1,2,5,6)
        $data = array('banner_id' => $this->uri->segment(4),'banner_image' => $file_name);
        $this->db->where('banner_image_id', $id);
        $this->db->update($this->db->dbprefix . 'banner_img', $data);
    }
}   

另一个建议:

如果$banner_image_id是关联数组,则将其转换为普通数组。

public function edit_banner_image($file_name) {
    $banner_image_id = $this->input->post('banner_image_id'); 
    $bid = array();
    if (isset($banner_image_id)) {
        foreach ($banner_image_id as $id) { 
            $bid[] = $id;
        }
        $data = array('banner_id' => $this->uri->segment(4),
                      'banner_image' => $file_name);
        $this->db->where_in('banner_image_id', $bid);
        $this->db->update($this->db->dbprefix . 'banner_img', $data);    
    }
}  

我建议您在控制器部分进行转换,而不是在模型中进行转换。以 // 结尾的行应位于控制器中。然后,您可以轻松地将$bid传递给edit_banner_image($file_name, $bid)函数。

public function edit_banner_image($file_name, $bid) {
    $banner_image_id = $this->input->post('banner_image_id'); //
    $bid = array();//
    if (isset($banner_image_id)) {//
        foreach ($banner_image_id as $id) { //
            $bid[] = $id;//
        }
        $data = array('banner_id' => $this->uri->segment(4),
                      'banner_image' => $file_name);
        $this->db->where_in('banner_image_id', $bid);
        $this->db->update($this->db->dbprefix . 'banner_img', $data);    
    }
}  

因此,您将拥有更具可读性的代码。

最新更新