我正在学习将codeigniter与rest_controller库一起使用。
我正在搜索以更新数据库中的表中的一些值。
我的控制器中有:
public function guest_patch(){
$idperson = $this->uri->segment(3);
$person = array(
'fiscalcode' => $this->input->post('fiscalcode'),
'name' => $this->input->post('name'),
'surname' => $this->input->post('surname')
);
$this->load->model('Person_model');
$data = $this->Person_model->patch($idperson, $person);
$this->response($data);
}
而在我的模型中:
public function patch($idperson, $person){
$this->fiscalcode = $person['fiscalcode'];
$this->name = $person['name'];
$this->surname = $person['surname'];
$result = $this->db->update('Persons', $this, array('id' => $idperson));
if($result){
return("Dati aggiornati");
}
}
我有两个问题要问你:
1( 在这种情况下,当我启动update方法时,数据库中的值将被删除(或用0代替(。事实上,我试图在我的模型中打印$person,但我传递的所有值(使用poster(都是空的。而如果我在控制器中手动插入数据,如:
'fiscalcode' =>'NewFiscalCode'
数据库中的数据被更新。我该如何更新从表单数据中恢复的值(在我使用邮递员传递的那一刻(?
2( 如果我不想更新值,所以我保留一个字段为空(例如,我在表单数据中只写了名称和姓氏,但我不想更改fiscalode字段(,那么数据库中关于该字段"fiscalode"的数据将被删除?
谢谢
情况1:
我猜你在数据库中给了列"iscalcode">作为整数,而你正试图更新非整数数据。因此MySQL正在将字段重置为0;
情况2:
更新控制器代码如下:
$person = array(
'name' => $this->input->post('name'),
'surname' => $this->input->post('surname')
);
if($this->input->post('fiscalcode')){
$person['fiscalcode'] = $this->input->post('fiscalcode');
}
更新模型代码如下:
if(isset($person['fiscalcode'])){
$this->fiscalcode = $person['fiscalcode'];
}
只有当您发布带有参数"fiscalode"的数据时,它才会分配
//use route for this in inside config/routes.php
$route['edit/(:any)'] = 'controller_name/guest_patch/$1';
public function guest_patch($idperson){
$person = array(
'fiscalcode' => $this->input->post('fiscalcode'),
'name' => $this->input->post('name'),
'surname' => $this->input->post('surname')
);
$this->load->model('Person_model');
$data = $this->Person_model->patch($idperson, $person);
$this->response($data);
}
//model
public function patch($idperson, $person){
return $this->db->where('idperson',$idperson)->update($person);
}