前回の記事では、ThinkPHP の基本、コントローラーとテンプレートの作成方法、M メソッドの使用方法について学びました。この記事では、データの CURD 操作について説明し、さらに多くのデータ操作について説明します。
CURD
CURDとは、データベーステクノロジーの略称で、一般的なプロジェクト開発における各種パラメーターの基本的な機能を指します。これは、作成、更新、読み取り、および削除の操作を表します。 CURD は、データを処理するための基本的なアトミック操作を定義します。 CURD が技術的に難しいレベルにまで引き上げられている理由は、複数のデータベース システムで CURD 操作を含む集計関連アクティビティを完了するパフォーマンスが、データ関係の変化に応じて大きく異なる可能性があるためです。
CURD は、特定のアプリケーションで作成、更新、読み取り、および削除メソッドを必ずしも使用するわけではありませんが、それらが実行する機能は同じです。たとえば、ThinkPHP は、add、save、select、および delete メソッドを使用して、モデルの CURD 操作を表します。
データの作成
ほとんどの場合、CURD の Create 操作は通常、フォームを通じてデータを送信します。まず、次の内容の add.html テンプレート ファイルをプロジェクトの Tpl/Form ディレクトリに作成します。 ="post" action="/Article/insert">
タイトル:
内容:
次に、プロジェクトの Action ディレクトリに FormAction.class.php ファイルを作成する必要があります。当面は FormAction クラスを定義するだけでよく、操作メソッドを追加する必要はありません。コードは次のとおりです。 :
class FormAction extends Action{
}
次に、
http://localhost/app/index.php/Form/add
にアクセスすると、追加操作が定義されていません。コントローラー内のメソッドですが、明らかにアクセスは正常です。対応する操作メソッドが見つからない場合、ThinkPHP は対応するテンプレート ファイルが存在するかどうかを確認するため、対応する追加テンプレート ファイルがあるため、コントローラーはテンプレート ファイルを直接レンダリングして出力します。したがって、実際のロジックを持たない操作メソッドの場合は、対応するテンプレート ファイルを直接定義するだけで済みます。
フォームで定義された送信アドレスが Form モジュールへの挿入操作であることがわかります。フォーム送信データを処理するには、次のように FormAction クラスに挿入操作メソッドを追加する必要があります。 extends action {
public function insert(){
$ form if($ result){
$ this-> succes ;getError());自動インクリメント主キーでない場合、戻り値は挿入されたデータの数を示します。 false が返された場合は、書き込みエラーを示します。
モデル
テストを容易にするために、まずデータベースに think_form テーブルを作成します。
CREATE TABLE IF NOT EXISTS `think_form` (
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`create_time` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE= MyISAM DEFAULT CHARSET=utf8 ;
挿入操作メソッドではD関数を使用しますが、M関数とは異なり、D関数には対応するモデルクラスが必要です。モデルクラスの定義仕様は、 モデル名 + Model.class.php (モデル名はキャメルケースで定義し、先頭文字は大文字になります)
Lib/Modelディレクトリ配下にFormModel.class.phpファイルを作成します。プロジェクトを作成し、次のコードを追加します:
class FormModel extends Model {
// 自動検証を定義します
protected $_validate = array(
array('title','require','title must'),
);
// 自動の定義 Complete
protected $_auto = array(
array('create_time','time',1,'function'),
));
}
は主に次の目的で使用されます。自動検証とフォームの自動入力、具体的には、使用方法については別のスペースを使用して別途説明しますので、ここでは省略します。理解する必要があるのは、D 関数を使用してモデル クラスをインスタンス化する場合、通常はデータ モデル クラスに対応する必要があり、create メソッドがフォームによって送信されたデータ (定義されている場合) を自動的に検証して自動的に完成させることだけです。 )、自動検証が失敗した場合、モデルの getError メソッドを通じて検証プロンプト情報を取得できます。検証に合格した場合は、データ オブジェクトが正常に作成されたことを意味しますが、現時点では add を呼び出すまでのみメモリに保存されます。データをデータベースに書き込むメソッド。これで完全な Create 操作が完了したので、ThinkPHP がデータ作成プロセスで 2 つのステップを使用していることがわかります:
最初のステップでは、create メソッドがデータ オブジェクトを作成します。
2 番目のステップでは、add メソッドを使用して現在のデータを追加します。オブジェクトをデータベースに書き込みます。
もちろん、最初のステップをスキップして 2 番目のステップに直接進むこともできますが、この種の前処理にはいくつかの利点があります:
1. フォームがどれほど複雑であっても、create メソッドは 1 行でデータ オブジェクトを簡単に作成できます。コードの量;
2. データを書き込む前に、データを検証して補足することができます。
実際、create メソッドには、データベースに書き込まれるデータが安全で効果的であることを確認するための機能操作が 1 つだけあります。
タイトルを入力せずにフォームを直接送信すると、システムはタイトルを次のようにする必要があるというプロンプトを表示します。
フォームが正常に送信されると、データテーブルに書き込まれたデータの create_time フィールドにすでに値が設定されていることがわかります。この値は、モデルの自動補完によって書き込まれます。
データがフォーム経由ではなく内部操作によって完全に書き込まれている場合 (つまり、データのセキュリティが完全に信頼できる場合)、次のように add メソッドを直接使用できます:
$Form = D('フォーム ');
$data['title'] = 'ThinkPHP';
$data['content'] = 'フォームコンテンツ';
$Form->add($data );
もサポート可能です オブジェクト モード操作:
$Form = D('Form');
$Form->title = 'ThinkPHP';
$Form->content = 'Form content' ;
$Form-> add();
オブジェクト モードで動作する場合、add メソッドはデータを渡す必要がなく、現在のデータ オブジェクトの割り当てを自動的に識別します。
データの読み取り
データの書き込みが成功したら、データの読み取り操作を実行できます。前回の記事では、select メソッドを使用してデータセットを取得できることをすでに知っています。ここでは、find メソッドを通じて単一のデータを取得します。
public function read($id) =0){
$Form = M('Form');
//データを読み取る
$data = $Form->find($id);
if($data) {
$this - > data = $ data; //テンプレート変数割り当て
}
$this->display();
}
読み取り操作メソッドにはパラメータ $id があり、これは URL で id 変数を受け入れることができることを意味します (詳細は変数で説明します)ここで使用する理由 D メソッドで M メソッドを使用しない理由は、find メソッドが基本モデル クラス Model 内のメソッドであるため、FormModel をインスタンス化するための無駄なオーバーヘッドが必要ないためです。 class (FormModel クラスが定義されている場合でも) 通常、特定のデータを読み取るには find メソッドを使用しますが、ここでは AR モードを使用して操作するため、クエリ条件は渡されません。 find($id) は、プライマリ データを読み取ることを意味します。 key は $id 値です。find メソッドの戻り値は次の形式の配列です:
array(
'id' => 5,
'title' => 'テストタイトル',
'content' => 'Test content',
'status' => 1,
)
次に、テンプレートにデータを出力し、読み取りテンプレート ファイルを追加します