次のエディタは、Thinkphp3.2 に同じデータを挿入する問題を完全に解決する記事を提供します。編集者はこれがとても良いと思ったので、参考として共有します。エディターをフォローして一緒に見てみましょう
問題の説明
本日TP3.2を使用してデータを挿入する際、同じデータ(いわゆる同じデータ、主キーが同じ)の挿入を避けるため、または唯一のインデックス付きフィールドも同じです)、私が作成したインデックスは次のようになります。主キーインデックスは自動インクリメントフィールドであり、重複することは不可能です。つまり、一意のインデックスが重複する可能性があります。 uid、year、mounth、day の 3 つのフィールドが同じである場合は、現在のレコードを更新します。
問題の解決策
以前この問題に直面したとき、MySQL がこの問題を解決するために ON DUPLICATE KEY UPDATE または REPLACE INTO を提供することを知っていました。
ON DUPLICATE KEY UPDATEを使用します
以下に示すように、データを挿入する前はテーブルにレコードが1つだけあります
レコードを挿入するとき、それが同じである場合、SQLステートメントは次のようになります。テーブル内の既存のレコードの場合は、レコードを更新します。それ以外の場合は、レコードが挿入されます。
INSERT INTO `work_log` ( `uid`, `year`, `mounth`, `day`, `status` ) VALUES (1, 2016, 6, 3, 1) ON DUPLICATE KEY UPDATE `status` = VALUES (`status`), `updated_ts` = NOW();
REPLACE INTOを使用します
コードは次のとおりです:
最初に次のコードを実行してデータを挿入します
REPLACE INTO `work_log` ( `uid`, `year`, `mounth`, `day`, `status` ) VALUES (1, 2016, 6, 2, 1)
結果は以下のようになります
次のコードを実行します再度実行すると、上で挿入したコードが更新されます
REPLACE INTO `work_log` ( `uid`, `year`, `mounth`, `day`, `status` ) VALUES (1, 2016, 6, 2, 5)
効果は以下の通りです
ON DUPLICATE KEY UPDATEとREPLACE INTOの違い
同じ値が表示された場合、ON DUPLICATE KEY UPDATEは既存のレコードを更新しますREPLACE INTO は前のレコードを削除してから新しいレコードを挿入します。
Thinkphp3.2の解決策
Thinkphp3.2では、同じデータを挿入する問題はadd()関数の3番目のパラメータを通じて処理されます。
Model.class.PHP の add() メソッドは、Db.class.php の insert メソッドを呼び出します。insert メソッドでは、次のコードがわかります。$replace は add です。メソッドの 3 番目のパラメータ。
以上がThinkphp3.2に同じデータを挿入する解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。