Автоматическое заполнение данных столбца sql после ссылки на подстроку другого столбца

#php #mysql #codeigniter

Вопрос:

В настоящее время я использую Mysql и фреймворк CodeIgniters MVC для заполнения своих данных. В таблице регистрируется каждое внесенное изменение статуса и время его внесения. Вот как в настоящее время выглядит база данных:

введите описание изображения здесь

Я добавил новые столбцы в таблицу под названием status_from и status_to, где я хочу, чтобы эти столбцы брали подстроку из столбца действия.

Но теперь, как мне отобразить его в своей базе данных со следующим кодом:

Класс контроллера:

 public function status($status){ 
        $statusar = array('D'=>'Draft','N'=>'Unpublish','Y'=>'Publish','U'=>'Action','L'=>'Unlisted','S'=>'Sold','T'=>'Let');
        if($this->input->post('id')){
            foreach($this->input->post('id') as $key => $id):
            $check = $this->listings_model->loadlisting_check($id);
            $log = "Listing website status changed from ". $statusar[$check->status]." to ".$statusar[$status].". The listing ID is #".$id.".";
            $this->logs_model->insert_log(array('refno'=>$check->refno,'action'=>trim($log)));
            $data=array('status'=>$status);  
            if($status == 'T' || $status == 'Y' || $status == 'S'){
                $pub = 1;
            }else{
                $pub =0;
            }
            $this->listings_model->lpupdate(array('property_publish'=>$pub),$id);

            endforeach; 
        } 
        return true;
    }
 

listings_model:

 function loadlisting_check($id)
    {
        $this->db->select("refno, status, archive");
        $id=$this->db->escape_str($id);
        $cond=array("$this->table_name.$this->primary_key"=>$id);
        $this->db->where($cond); 
        $this->db->from($this->table_name);
        $query = $this->db->get();
        return $query->row();
     } 
 

logs_model:

 public function insert_log($log)
    {
        $log['agent_id'] = $this->session->userdata('clientsessuserid');
        $log['logtime'] = date('Y-m-d H:i:s');
        $this->db->insert($this->table_name, $log);
        return true;
    }
 

В принципе, я хочу заполнить столбец status_from $statusar[$check->status] и столбец status_to $statusar[$status] при каждой новой записи

Ответ №1:

Вы можете передать переменные, которые хотите добавить в массив, в параметре метода insert_log с соответствующим ключом, соответствующим имени столбца в вашей таблице

  public function status($status){ 
            $statusar = array('D'=>'Draft','N'=>'Unpublish','Y'=>'Publish','U'=>'Action','L'=>'Unlisted','S'=>'Sold','T'=>'Let');
            if($this->input->post('id')){
                foreach($this->input->post('id') as $key => $id):
                $check = $this->listings_model->loadlisting_check($id);
                $log = "Listing website status changed from ". $statusar[$check->status]." to ".$statusar[$status].". The listing ID is #".$id.".";
                $this->logs_model->insert_log(array('refno'=>$check->refno,'action'=>trim($log) , 'status_from'=>$statusar[$check->status] ,'status_to'=>$statusar[$status]));
                $data=array('status'=>$status);  
                if($status == 'T' || $status == 'Y' || $status == 'S'){
                    $pub = 1;
                }else{
                    $pub =0;
                }
                $this->listings_model->lpupdate(array('property_publish'=>$pub),$id);
    
                endforeach; 
            } 
            return true;
        }
 

И вам больше не нужно будет ничего добавлять в свою модель

Комментарии:

1. $pub = (int)in_array($status, ['T', 'Y', 'S']);