仕事上の理由により、thinkPHP の create() メソッドで問題が発生したため、create() メソッドをさらに調査するために create() を追跡しました。
create() メソッドには 2 つのパラメーターがあることがわかりました、最初のパラメーターはよく知られているデータ パラメーター、 2 番目のパラメーターは隠し $type パラメーター、では、このパラメーターは何を制御するために使用されるのでしょうか? // Status $type = $type?$type!empty($data[$this->getPk()])?self::MODEL_UPDATE:self::MODEL_INSERT);
この文をよく考えてみたところ、 out、
この隠しパラメータは、このデータベースの特定の操作を示すために使用されます デフォルトでは、このパラメータに値を割り当てる必要はありません。システムが自動的に識別します
これが識別される方法です:
渡したデータに主キーと同じフィールドがある場合、このデータベース操作はデフォルトで更新操作になります。これは主に、ほとんどの場合、主キーがデフォルトで自動インクリメントされ、挿入操作が一般的に行われるためです。主キーに値を割り当てませんが、問題はここにあります
私が最近取り組んだプロジェクトでは、学生番号を主キーとして直接使用していましたが、学生番号は自動インクリメントできず、固定形式で入力する必要がありました。しかし、システムは私の入力操作を自動的に更新操作として認識しました。そして私の自動補完 コードは次のように書かれています:
これは見つけるのが非常に難しい問題です。最近、多くの人がこの問題に遭遇していることがわかったので、それを説明する記事を書きました。
また、自動検証/オートコンプリート機能が失敗する場合は、Model クラス名が間違って記述されている可能性があります。これは、複数の文字や文字が欠けている場合によく発生します。
基本的に、自動検証/自動完了が失敗する状況は次の 2 つです