前回の記事では、ThinkPHP の基本、コントローラーとテンプレートの作成方法、M メソッドの使用方法について学びました。この記事では、データの CURD 操作について説明し、さらに多くのデータ操作について説明します。
カード
CURD はデータベース テクノロジーの略称で、一般的なプロジェクト開発におけるさまざまなパラメーターの基本的な機能が CURD です。これは、作成、更新、読み取り、および削除の操作を表します。 CURD は、データを処理するための基本的なアトミック操作を定義します。 CURD が技術的に難しいレベルにまで引き上げられている理由は、複数のデータベース システムで CURD 操作を含む集計関連アクティビティを完了するパフォーマンスが、データ関係の変化に応じて大きく異なる可能性があるためです。
CURD は、特定のアプリケーションで作成、更新、読み取り、および削除メソッドを必ずしも使用するわけではありませんが、それらが実行する機能は同じです。たとえば、ThinkPHP は、add、save、select、および delete メソッドを使用して、モデルの CURD 操作を表します。
データ作成
ほとんどの場合、CURD の Create 操作は通常、フォームを通じてデータを送信します。まず、次の内容の add.html テンプレート ファイルをプロジェクトの Tpl/Form ディレクトリに作成します。
次に、プロジェクトの Action ディレクトリに FormAction.class.php ファイルを作成する必要があります。当面は FormAction クラスを定義するだけでよく、操作メソッドを追加する必要はありません。コードは次のとおりです。 :
class FormAction extends Action{-
}-
次に、
にアクセスしてください。
http://localhost/app/index.php/Form/add-
フォームページが表示されます。コントローラーには追加操作メソッドが定義されていませんが、アクセスは正常に行われています。対応する操作メソッドが見つからない場合、ThinkPHP は対応するテンプレート ファイルが存在するかどうかを確認するため、対応する追加テンプレート ファイルがあるため、コントローラーはテンプレート ファイルを直接レンダリングして出力します。したがって、実際のロジックを持たない操作メソッドの場合は、対応するテンプレート ファイルを直接定義するだけで済みます。
フォームで定義された送信アドレスが Form モジュールへの挿入操作であることがわかります。フォーム送信データを処理するには、次のように FormAction クラスに挿入操作メソッドを追加する必要があります。
class FormAction extends Action{
-
パブリック関数 insert(){
-
$Form
if($Form->create()) {-
$result = $Form->add();-
if($result) {-
$this->success('操作は成功しました!');-
}その他{-
$this->error('書き込みエラー!');-
}-
}その他{-
$this->error($Form->getError());-
}-
}-
}-
-
主キーが自動インクリメント型の場合、add メソッドの戻り値は主キーの値になります。自動インクリメント主キーでない場合、戻り値は挿入されたデータの数を示します。 false が返された場合は、書き込みエラーを示します。
モデル
テストを容易にするために、まずデータベースに think_form テーブルを作成します。
-
`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,
-
主キー (`id`)
-
) ENGINE=MyISAM デフォルト CHARSET=utf8 ;
挿入操作メソッドでは D 関数を使用しましたが、M 関数とは異なり、D 関数には対応するモデル クラスが必要です。モデルクラスの定義仕様は、モデル名 + Model.class.php (モデル名はキャメルケースで定義し、先頭文字は大文字となります)
プロジェクトの Lib/Model ディレクトリに FormModel.class.php ファイルを作成し、次のコードを追加します:
-
class FormModel extends Model {
-
// 自動検証を定義します
-
protected $_validate = array(
-
array('タイトル','必須','タイトル必須'),
-
);
-
// 定義のオートコンプリート
-
protected $_auto = array(
-
array('create_time','time',1,'function'),
-
);
-
}
主にフォームの自動検証と自動入力に使用されます。具体的な使用方法については別のスペースで説明するので、ここでは省略します。理解する必要があるのは、D 関数を使用してモデル クラスをインスタンス化する場合、通常はデータ モデル クラスに対応する必要があり、create メソッドがフォームによって送信されたデータ (定義されている場合) を自動的に検証して自動的に完成させることだけです。 ) 自動検証が失敗した場合は、モデルの getError メソッドを通じて検証プロンプト情報を取得できます。検証に合格した場合、データ オブジェクトは正常に作成されたことを意味しますが、現時点では add を呼び出すまでのみメモリに保存されます。データをデータベースに書き込むメソッド。これで完全な作成操作が完了したため、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->title = 'ThinkPHP';
-
$Form->content = 'フォームコンテンツ';
-
$Form->add();
-
オブジェクト モードで動作する場合、add メソッドはデータを渡す必要がなく、現在のデータ オブジェクトの割り当てを自動的に識別します。
読み取りデータ
データの書き込みが成功したら、データの読み取り操作を実行できます。前回の記事では、select メソッドを使用してデータセットを取得できることをすでに知っています。ここでは、find メソッドを使用して単一のデータを取得します。
-
パブリック関数 read($id=0){
-
$Form = M('フォーム');
-
//データを読み取る
-
$data = $Form->find($id);
-
If($data) {
-
$this->data = $data;// テンプレート変数の割り当て
-
}その他{
-
$this->error('データエラー');
-
}
-
$this->display();
-
}
読み取り操作メソッドにはパラメーター $id があり、これは URL 内の id 変数を受け入れることができることを意味します (変数の章で詳しく説明します。後で変数の章で説明します。ここで D メソッドの代わりに M メソッドが使用される理由は次のとおりです。 find メソッドは基本モデル クラスの Model メソッド内にあるため、FormModel クラスをインスタンス化するために無駄なオーバーヘッドを必要としません (FormModel クラスが定義されている場合でも) ここでは通常、find メソッドを使用して特定のデータを読み取ります。 AR モードを使用して操作するため、クエリ条件は渡されません。find( $id) は、主キーが $id 値であるデータを読み取ることを意味します。find メソッドの戻り値は、次の形式の配列です。 🎜>
配列(-
'id' => 5,-
'タイトル' => 'テストタイトル',-
'コンテンツ' => 'テストコンテンツ',-
'ステータス' => 1,-
)-
次に、テンプレート内のデータを出力し、読み取りテンプレート ファイル
を追加します。
<表>-
-
id: | -
{$data.id} | -
-
-
タイトル: | -
{$data.title} | -
-
-
コンテンツ: | -
{$data.content} | -
-
テーブル>-
完了すると、
にアクセスできるようになります。
http://localhost/app/index.php/Form/read/id/1-
それを確認しに来ました。
特定のフィールドの値のみをクエリする必要がある場合は、getField メソッドを使用することもできます。例:
$Form = M("フォーム");
-
// タイトルを取得
-
$title = $Form->where('id=3')->getField('title');
-
上記の使用法は、ID 値 3 のデータのタイトル フィールドの値を取得することを意味します。実際、getField メソッドには多くの用途がありますが、特定のフィールドの値を取得することが getField メソッドの最も一般的な用途です。
クエリ操作は、特に複雑なクエリ条件が関係する場合に最も一般的に使用される操作です。クエリについては、クエリ言語の章で詳しく説明します。
データ更新
データの書き込みと読み取りが正常に完了したら、データを編集できます。まず、次のように編集フォームのテンプレート ファイル edit.html を追加します。
テンプレートの編集は、新しいフォームの追加とは異なります。そのため、今回は FormAction クラスに 2 つの操作メソッドを追加する必要があります。
-
パブリック関数編集($id=0){
-
$Form = M('フォーム');
-
$this->vo = $Form->find($id);
-
$this->display();
-
}
-
パブリック関数 update(){
-
$Form = D('フォーム');
-
If($Form->create()) {
-
$result = $Form->save();
-
if($result) {
-
$this->success('操作は成功しました!');
-
}その他{
-
$this->error('書き込みエラー!');
-
}
-
}その他{
-
$this->error($Form->getError());
-
}
-
}
完了すると、
にアクセスできるようになります。
-
http://localhost/app/index.php/Form/edit/id/1
データ更新操作では、ThinkPHP の save メソッドが使用されます。create メソッドを使用して、フォームによって送信されたデータを作成することもできます。save メソッドは、現在のデータ オブジェクトと更新条件をデータベースに自動的に更新します。は実際にはテーブルの主キーです。そのため、編集ページで主キーの値を非表示フィールドとして送信します。
更新操作がフォームの送信に依存しない場合は、次のように記述できます:
-
$Form = M("フォーム");
// 変更するデータオブジェクト属性の割り当て -
$data['id'] = 5;-
$data['title'] = 'ThinkPHP';-
$data['content'] = 'ThinkPHP3.1 バージョンがリリースされました';-
$Form->save($data); //条件に従って変更したデータを保存します-
save メソッドは、データ オブジェクト内の主キー フィールドを自動的に識別し、それを更新条件として使用します。もちろん、更新条件を明示的に渡すこともできます:
$Form = M("フォーム");
-
// 変更するデータオブジェクトの属性の割り当て
-
$data['title'] = 'ThinkPHP';
-
$data['content'] = 'ThinkPHP3.1 バージョンがリリースされました';
-
$Form->where('id=5')->save($data) // 条件に従って変更したデータを保存します
-
オブジェクト モードに変更することもできます:
$Form = M("フォーム");
// 変更するデータオブジェクトの属性の割り当て -
$Form->title = 'ThinkPHP';-
$Form->content = 'ThinkPHP3.1 バージョンがリリースされました';-
$Form->where('id=5')->save() // 条件に従って変更したデータを保存-
-
データ オブジェクトの割り当てメソッド、save メソッドはデータを渡す必要はなく、自動的に認識されます。
save メソッドの戻り値は、影響を受けたレコードの数です。 false が返された場合は、更新エラーを示します。
場合によっては、毎回 save メソッドを呼び出す代わりに、特定のフィールドの値を変更し、setField メソッドを使用するだけで済みます。
$Form = M("フォーム");
//タイトル値を変更
-
$Form->where('id=5')->setField('title','ThinkPHP');
-
統計フィールドの場合、システムはより便利な setInc メソッドと setDec メソッドも提供します。 -
例:
$User = M("User") // ユーザーオブジェクトをインスタンス化します
$User->where('id=5')->setInc('score',3) // ユーザーのポイントが 3 増加します
-
$User->where('id=5')->setInc('score'); // ユーザーのポイントに 1 を加算します
-
$User->where('id=5')->setDec('score',5) // ユーザーのポイントが 5 減ります
-
$User->where('id=5')->setDec('score') // ユーザーのポイントが 1 減ります
;
-
-
データを削除
データの削除は非常に簡単で、たとえば次のように delete メソッドを呼び出すだけです。
$Form = M('フォーム');
$Form->delete(5);
-
主キー 5 のデータの削除を示します。 delete メソッドは、削除条件に応じて、単一のデータまたは複数のデータを削除できます。例:
-
$User = M("User") // ユーザーオブジェクトをインスタンス化します
-
$User->where('id=5')->delete() // ID 5 のユーザー データを削除します
-
$User->delete('1,2,5'); // 主キー 1、2、5 を持つユーザー データを削除します
-
$User->where('status=0')->delete() // ステータス 0 のユーザー データをすべて削除します
delete メソッドの戻り値は、削除されたレコードの数です。戻り値が false の場合は、SQL エラーが発生したことを意味します。戻り値が 0 の場合は、データが削除されなかったことを意味します。
概要
これで、ThinkPHP の CURD 操作を基本的にマスターし、ThinkPHP の create、add、save、delete メソッドと、フィールド操作のための 2 つの getField メソッドと setField メソッドの使い方を学びました。次の記事では、ThinkPHP が提供するクエリ言語の使用方法を詳しく見ていきます。