ThinkPHP の CURD 操作の学習 (1)
前に書いてください
今週 ThinkPHP の学習を始めて、学習日記を記録してください。 TP の使い方を学ぶだけでなく、ソース コードから TP フレームワークを学びます。
毎日日記を書きますが、必ずしもオンラインに公開する必要はありません。頑張って耐えられるといいですね。
早速、ソースコードを読んでいるので、TP の確立と構成については詳しく説明しません。公式ドキュメントには詳細な紹介がたくさんあります。
TP を学びたい場合は、ThinkPHP3.2.3 クイックスタートをクリックして学ぶことができ、誰もが一緒に進歩することができます。
CURD操作
CURD操作とは何ですか?実際、これはデータベースの追加、削除、変更、クエリの略語です。これには、作成、更新、読み取り、削除という 4 つの基本操作が含まれます。 TP での CURD 操作の実装は、追加、保存、選択、更新です。
Think/Library/Model.class.php を開くと、これらの 4 つの操作が見つかります。次に、ソース コードを見てみましょう。実行中のプロセスを理解することによってのみ、これら 4 つの操作をより適切に使用できるようになります。
CUEDオペレーションのaddメソッド
addメソッドはデータを追加するために使用され、TPのcreateオペレーションの実装です。注意すべき点は、TPModel にも create メソッドがありますが、これは CURD 操作の一種ではなく、データベースに挿入されるデータの処理メソッドであることです。
パラメータ分析
add メソッドには次の 3 つのパラメータがあります (渡す必要はありません)
$data デフォルト値'' データベースに挿入する必要があるデータ $option デフォルト値 array() 式パラメータが格納されます実行されたすべてのデータ 連続操作$replace デフォルト値 false データベースへの挿入時に置換操作を実行するかどうか
戻り値は bool (false) または影響を受ける行数または主キー値の場合がありますデータベース内。戻り値から、この操作は連続操作の最後に行う必要があることがわかり、一連のコンボの最後の動きとみなすことができます。
プロセス分析
addメソッドの実行プロセスを4つのステップに分けてみました
- まず、データが空かどうかを確認します
- 次に、データ処理と式分析を実行します
- 上記はすべてデータを通じて挿入結果を返します挿入
- 返された結果を分析する
ステップ1 ユーザー登録操作を実行すると仮定し、データテーブルUserを挿入し、addメソッドを使用して操作します。ユーザーフィールドは次のとおりです:
主キー user_id ニックネーム user_name パスワード パスワード email
フロントエンド POST データ:
array( 'user_name' => 'xiamsahfw', 'password' => 'adhe99211' , 'confrim' => 'adhe99211' , 'email' => '221131@qq.com', 'hid' => 'register' );
UserController クラスの操作:
$data = I('post.');$User = M('User');$User->create($data);$User->add();
add 操作では、add にパラメータは渡されませんが、 in この値は $User->create($data) に渡されます。この操作では、データが Model の $this->data に自動的に追加され、add によってその値が自動的に参照されます。
同時に、create メソッドは、渡されたパラメーターとデータ テーブルのフィールドを自動的に比較し、テーブルに属さないフィールドを削除します。
ステップ 2 の後、add メソッドは $data を処理するために _facade メソッドを呼び出します。実際、$data データは create メソッドで処理されているため、ここで 2 回処理されます。 UserController で create メソッドが呼び出されず、 $data が add メソッドに直接渡された場合、 _facade は 'confrim' => 'adhe99211' 、 'hid' => 'register' を削除し、次のようになります:
array( 'user_name' => 'xiamsahfw', 'password' => 'adhe99211' , 'email' => '221131@qq.com' );
Array ([table] => user[model] => User)
これまでにwhereやgroup byなどの連続した操作があった場合には、それらもこの項目に表示されます。さらに、コヒーレントな操作を add メソッドに渡すと、既存の操作とマージされます。
ステップ3 以上が実際にデータ挿入の準備作業になります。 準備作業が完了したら、データ挿入を実行できます。もちろん、TP ではデータの挿入は Model の機能ではなく、ThinkDriver.class.php の insert メソッドを呼び出す必要があります。
insert メソッドは 3 つのパラメーターを受け入れます
$data$option$replace最初の 2 つのパラメーターは、処理されたデータと結合されたコヒーレント操作式です。3 番目のパラメーターは、データベースに挿入するときに操作を実行するかどうかを示します。置換操作の場合、デフォルトは false です。このメソッドでは、渡されたデータを一貫した演算式と組み合わせて正式な SQL ステートメントを形成し、SQL ステートメントを実行します。最後に、実行結果が返されます。
ステップ4 戻り結果が得られますが、addは結果を直接返すのではなく、解析後の結論を返します。 insert によって返される結果には以下が含まれる場合があります:
failure=> false success=> 影響を受ける行の数を返すしかし、実際には、挿入が成功したという結論だけでなく、挿入後に主キーの値を取得したい。 addメソッドでは戻り結果を判定し、影響を受ける行数(挿入された複数のデータ)または主キーの値(1つのデータ)またはfalseを返します。
余談: データを挿入する前に、このコード行に気づきました。
if(false === $this->_before_insert($data,$options)) { return false;}
这里TP没有做任何注释,寻找之后,发现是一个空方法,解释为 插入数据前的回调方法
// 插入数据前的回调方法protected function _before_insert(&$data,$options) {}
将这个方法打印出来,结果为NULL
var_dump($this->_before_insert($data,$options)); // NULL
百度一下也没找到想要的答案,我对TP的官方文档并没有看完,可能官方会有用法的介绍。这里很纠结,我猜测是在子类继承时,可以实现这个方法进行某些特殊操作(很大可能)。与之相同的还有_after_insert方法。
总结
写了一大串,也不知道写的是不是很清晰,但是我的确是对这个方法熟悉了很多。这个方法虽然可以不传递参数,但如果之前没进行create还是会出错的,虽然内部集成了数据处理,但不是很完善,比如对数据没能进行转义,也不能够对数据字段进行验证,需要我们自己进行调用其它方法等等。知道了add的运行原理,自然能够很好的运用它,同时对自己封装模型类时也有了很大启发。
今天就写到这儿,下一篇准备写CURD中的read,也就是TP中的select。
博主大三狗,正在努力学习中,文中有错漏之处难免,欢迎指正,欢迎批评。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
