Codeigniter查询生成器更新功能

时间:2017-04-17 05:30:34

标签: php codeigniter activerecord

我的模型中有一个更新功能,我从我的控制器调用

if($_POST)
{
   $this->User_model->update('user_about',$_POST,$this->session->userdata['id']);
}

采用三个参数,表名,发布数据和用户ID。该函数在Model中定义为

public function update($table,$data,$id)
{
    $row=$this->db->select('*')->from($table)->WHERE('user_id',$id)->row();
    if($row)
    {
        $this->db->WHERE('user_id',$id)->UPDATE($table,$data);
    }
    else
    {
        $data['user_id']=$id;
        $this->db->insert($table,$data);
    }
}

我在这里做的是检查特定用户的记录是否存在它应该插入,否则更新。像魅力一样工作

问题

有没有办法跳过IF条件块?查询构建器中是否有任何自行执行检查的规定?

1 个答案:

答案 0 :(得分:1)

这是我在编程中经常使用的复制函数的自定义通用插入和更新。

public function updateOnDuplicate($table, $data ) 
   {
     if (empty($table) || empty($data)) return false;
     $duplicate_data = array();

     foreach($data AS $key => $value) {
        $duplicate_data[] = sprintf("%s='%s'", $key, $value);
     }

     $sql = sprintf("%s ON DUPLICATE KEY UPDATE %s", $this->db->insert_string($table, $data), implode(',', $duplicate_data));

     $this->db->query($sql);
     return $this->db->insert_id();
   }

您可以在模型中使用上述功能并在控制器中调用它。如果出现重复,该函数将更新该值。如果您需要详细说明A Generic CodeIgniter Function for both Update and Insert,请查看以下博文。