4

これは可能ですか/本当ですか?

たとえば、ID が 1 の行を更新したいが行が存在しない場合、この関数 (更新関数)は指定されたデータを含む新しい行を自動的に挿入しますか? これを有効にするパラメータはありますか?

そうでない場合、別の関数を使用してテーブルを評価し、行が存在する場合は bool を返すことなく、(可能であれば)これを処理する最良の方法は何でしょうか。(その後、そこからUPDATEまたはINSERTしています)

大した問題ではありません..説明を探して、誰かがこれについて知っているかどうか疑問に思っています。

4

3 に答える 3

8

このリンクで良い解決策を見つけました。誰かがまだcodeigniterで解決策を探している場合に役立つことを願っています:

$sql = 'INSERT INTO menu_sub (id, name, desc, misc)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE 
            name=VALUES(name), 
            desc=VALUES(desc), 
            misc=VALUES(misc)';

$query = $this->db->query($sql, array( $id, 
                                       $this->validation->name, 
                                       $this->validation->desc, 
                                       $this->validation->misc
                                      ));  
于 2014-07-05T11:07:46.193 に答える
5

おそらく、あなたが探しているのはこれINSERT ... ON DUPLICATE KEY UPDATEです-MySQLを使用していて、あなたidがテーブルの一意のキーである場合。

$this->db->query()DB ドライバーのヘルパー関数のような組み込みのアクティブ レコードの代わりに、手動でクエリを作成して関数に渡す必要があります。

于 2013-04-07T08:15:51.953 に答える
1

なぜこれを使用するのかわかりませんが、これを処理する 1 つの方法 (要求された 1 つの関数を使用) は次のとおりです。

function update_or_insert($data){

    if(!array_key_exists('id',$data))
        return $this->db->insert($data);

    $row = $this->db->get_where('mytable',['id' => $data['id']])->row();

    if(!$row) return false;

    $this->db->where($row->id);
    return $this->db->update('my_table',$data); 
}

$data は、コントローラーから渡された $_POST 配列全体にすることができます。テーブル (my_table) を表すモデル内にこの関数を配置します。

これは、機能するはずの 1 つのソリューションです。我々に教えてください。

于 2013-04-08T08:16:16.297 に答える