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

时间:2015-06-12 07:53:56

标签: codeigniter

在我看来,我需要能够获取隐藏的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>

1 个答案:

答案 0 :(得分:1)

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

假设您的ID号为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);    
    }
}  

因此,您将拥有更易读的代码。