0

我有一个在 codeigniter 中开发的网站,我想制作一个编辑表格的功能,但我有两个页面用不同的字段更新表格。这是我在模型中的功能:

public function editHotel($service_id) {
         $hotel_id = $this->getHotelByServiceId($service_id);
         $hotel = array(
              'rating_id'=>$this->input->post('rating'),
              'treatment_id'=>$this->input->post('treatment'),
              'nation_id'=>$this->input->post('nation'),
              'region_id'=>$this->input->post('region'),
              'city_id'=>$this->input->post('city'),
              'area_id'=>$this->input->post('area'),
              'address'=>$this->input->post('address'),
              'phone'=>$this->input->post('phone'),
              'fax'=>$this->input->post('fax'),
              'email'=>$this->input->post('email'),
              'site'=>$this->input->post('site'),
              'description_it'=>$this->input->post('description_it'),
              'description_en'=>$this->input->post('description_en'),
              'latitudine_google'=>$this->input->post('latitudine_google'),
              'longitudine_google'=>$this->input->post('longitudine_google'),
              'modified'=> date('Y-m-d H:i:s'),
        );
        $this->db->where('service_id', $service_id);
        $this->db->update('hotel',$hotel);
    }

在这个函数中,我更新了我的所有表格,但我有一个只有一些值的页面,我只想像这样更新:

public function editDescriptionHotel($service_id) {
             $hotel_id = $this->getHotelByServiceId($service_id);
             $hotel = array(
                  'description_it'=>$this->input->post('description_it'),
                  'description_en'=>$this->input->post('description_en'),
                  'modified'=> date('Y-m-d H:i:s'),
            );
            $this->db->where('service_id', $service_id);
            $this->db->update('hotel',$hotel);
        }

我还有其他页面可以更新表格的某些值。如果我在所有页面中使用函数“editHotel”如果我没有输入代码点火器将 0 插入表的字段是否可以只使用第一个函数“editHotel”并只更新我发布的字段?我只想在所有页面中使用一个函数,它不是更新所有字段,而是只更新我在页面中拥有的字段。有可能吗?我不希望更新表格的每个页面都编写表格的不同函数更新

4

1 回答 1

2

好吧,如果您使输入字段与表格列具有相同的名称,那很容易:

public function updateHotels($service_id) 
{
   $hotel_id = $this->getHotelByServiceId($service_id);
   $fields = array();

   foreach($this->input->post() as $k => $v){
    if($k != 'submit'){   //or anything you always want to esclude
      $fields[$k] = $v;
    }
   }

   $fields['modified'] = date('Y-m-d H:i:s');

   $this->db->where('service_id', $service_id);
   $this->db->update('hotel', $fields);
}


为了获得更好的控制和更好的可重用性,您可以将可逃逸索引数组(那些不想匹配或您不想匹配列名的索引)作为参数传递。您可以更进一步,列出您想要添加的额外字段:

$exclude = array('submit', 'other_field');
$extra = array('modified' => date('Y-m-d H:i:s'));

public function updateHotels($service_id, $exclude, $extra) 
    {
       $hotel_id = $this->getHotelByServiceId($service_id);
       $fields = array();

       foreach($this->input->post() as $k => $v){
        if(!in_array($k, $exclude){
          $fields[$k] = $v;
        }
       }

       $columns = array_merge($fields, $extra);

       $this->db->where('service_id', $service_id);
       $this->db->update('hotel', $columns);
    }
于 2013-02-20T21:24:48.267 回答