web-dev-qa-db-ja.com

Codeigniterが存在しない場合は挿入し、存在しない場合は更新する

これらの製品カテゴリには2つのテーブルがあります。1つは製品カテゴリを格納するテーブルで、もう1つは新しい製品を挿入するときに製品を挿入する製品リストです。製品カテゴリに格納されているカテゴリから選択するドロップダウンがありますが、別のカテゴリを追加したい場合、ドロップダウンに「その他」のオプションがあり、テキストエリアが表示され、別のカテゴリを作成できます。私の問題は、データベースに既存のカテゴリのある新製品を追加した場合、2つのテーブルに挿入されません。しかし、新しいカテゴリの新しい製品を追加すると、コントローラが正常に挿入されます。

 function do_upload() {


    $config['upload_path'] = './assets/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2000';
    $config['max_width'] = '2000';
    $config['max_height'] = '2000';
    $config['new_image'] = './assets/';

    $config['overwrite'] = TRUE;
    $this->load->library('upload', $config);
    $this->form_validation->set_rules('name', 'Product Name', 'required|xss_clean');
    $this->form_validation->set_rules('description', 'Product Description', 'required|xss_clean');
    $this->form_validation->set_rules('price', 'Price', 'required');
    if (!$this->upload->do_upload() || !$this->form_validation->run()) {
        $error = array('error' => $this->upload->display_errors());
        redirect('add_products');
    } else {

        $data = $this->upload->data();
        $this->thumb($data);

         $category = $_POST["prod_category"];
        if($category  == "2")
            {
            $category = $_POST["other_category"];

            }
        $file = array(
            'img_name' => $data['raw_name'],
            'thumb_name' => $data['raw_name'] . '_thumb',
            'ext' => $data['file_ext'],
            'product_name' => $this->input->post('name'),
            'product_description' => $this->input->post('description'),
            'product_price' => $this->input->post('price'),
            'product_category' =>$category,    


        );

         $this->db->insert("product_category",array("category"=>$category));
          $this->User->insert_prod($file);
        $data = array('upload_data' => $this->upload->data());
        echo '<script>alert("You Have Successfully Added a new Product!");</script>';
        redirect('admin_products','refresh');
    }
}

モデル

public function insert_prod($file){
        $this->db->insert('product_table',$file);
    }
9
Christian

まず、ユーザーまたはデータが存在するかどうかを確認する必要があります。その後、更新および挿入操作を実行できます。

   $this->db->where('user_id',$id);
   $q = $this->db->get('profile');

   if ( $q->num_rows() > 0 ) 
   {
      $this->db->where('user_id',$id);
      $this->db->update('profile',$data);
   } else {
      $this->db->set('user_id', $id);
      $this->db->insert('profile',$data);
   }

Mysqlクエリを使用する方法はもう1つあります

   $query = 'INSERT INTO table_name (id, name) VALUES (?, ?)
     ON DUPLICATE KEY UPDATE name=VALUES(name)';

説明これがテーブルであるとします。

+----+----------+
| id | name     |
+----+----------+
|  1 | Urfusion |
|  2 | Christian|
+----+----------+

今、私たちはON DUPLICATE KEY UPDATE

INSERT INTO table_name VALUES (3,'Example') ON DUPLICATE KEY UPDATE name='Example';

結果は

+----+----------+
| id | name     |
+----+----------+
|  1 | Urfusion |
|  2 | Christian|
|  3 | Example  |
+----+----------+

Exampleがテーブルに挿入されました。1か2の位置にデータを挿入しようとすると、キーidのエントリが存在しないためです。

INSERT INTO table_name VALUES (1,'Name_changed') ON DUPLICATE KEY UPDATE name='Name_changed';

次に結果は

| id | name        |
+----+-------------+
|  1 | Name_changed|
|  2 | Christian   |
|  3 | Example     |
+----+-------------+

詳細 情報

17
urfusion