次の記事は、Thinkphp3.2 に同じデータを挿入する問題に対する完璧な解決策を提供します。内容がとても良かったので、参考としてシェアさせていただきます。
問題の説明
本日、TP3.2を使用してデータを挿入した際、同じデータ(いわゆる同じデータ、主キーが同じ、または一意のインデックスのフィールドが同じデータ)の挿入を避けるために、同じ)、作成したインデックスは次のとおりです。図、主キーインデックスは自動インクリメントフィールドであり、重複は不可能です。つまり、3つのフィールドがuidであれば重複する可能性があることを願っています。 、年、山、日が同じ場合、現在の記録が更新されます。
問題の解決策
以前この問題に直面したとき、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.3バージョンのデータベースの追加、削除、変更、実装コードの確認
以上がThinkphp3.2で同じデータを挿入する問題を完全に解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。