ThinkphpにおけるCreate方法を深く探究する。

1878 ワード

仕事の原因でthinkPHPのcreate()方法に問題があったため、create()を追跡し、create()の方法をさらに探った。
もともとcreate()の方法には二つのパラメータがありますが、一つ目のパラメータはよく知られているデータパラメータです。二つ目は隠れたtypeパラメータです。このパラメータは何を制御しますか?
//状態$type=$type?タイプemppty($data[$this->getPk())?self:MODEL_UPDATE:self:MODEL_INSERT);
この話をよく考えてみると、この隠しパラメータは今回のデータベースの具体的な操作を示すものであり、1は挿入操作であり、0は更新操作であり、
デフォルトの場合はこのパラメータに値を割り当てなくてもいいです。システムは自動的に識別できます。
これはこのように認識されています。
入力されたデータの中にホームキーと同じフィールドがある場合、今回のデータベース操作はデフォルトで更新されます。このように判断されるのは、主キーがデフォルトで増加しているためです。挿入操作は主キーに値を割り当てられないのが普通ですが、問題はここにあります。
最近やったプロジェクトは直接学号をメインキーとしていますが、学号は自増ではなく固定フォーマットがあるので、入力しなければなりません。
しかし、システムは自動的に私の入力操作を更新操作と見なしています。私の自動完了コードはすべてこのように書きます。
protected $_auto = array(
        array('majorid','maxmajoridadd1',1,'callback'),
    );
第三のパラメータ1はマニュアルを見ると、この自動完了操作は挿入時に実行されると分かります。
システムは私の挿入操作を更新操作と見なしています。私が設定した自動完了コードは自然に無効になります。実行されなくなります。
あなたがメインキーフィールドの値を入力する場合があります。このように書いてもいいです。
create($_POST,1)
createの方法を直接教えます。今回の操作は挿入操作です。
これは非常に発見しにくい問題です。最近多くの人がこの問題に遭遇したことが分かりました。ここで説明します。
また、自動認証/自動完了機能が無効になりました。また、Model類の名前が間違っているかもしれません。このような間違いを犯したことがあります。
基本的に自動認証/自動完了失効はこの2つの状況です。
もっと多くのthinkPHPに関する内容に興味がある読者は、当駅のテーマを調べてもいいです。「ThinkPHP入門教程」、「thinkPHPテンプレート操作技術のまとめ」、「ThinkPHP常用方法まとめ」、「smartyテンプレート入門基礎教程」および「PHPテンプレート技術まとめ」。
本論文で述べたいのですが、ThinkPHPフレームに基づくPHPプログラムの設計に役立ちます。