ホームページ  >  記事  >  php教程  >  ThinkPHP3.1 クイックスタート (2) データ CURD

ThinkPHP3.1 クイックスタート (2) データ CURD

黄舟
黄舟オリジナル
2016-12-20 11:33:031265ブラウズ

前回の記事では、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 つだけあります。
タイトルを入力せずにフォームを直接送信すると、システムはタイトルを次のようにする必要があるというプロンプトを表示します。

ThinkPHP3.1 クイックスタート (2) データ CURD

フォームが正常に送信されると、データテーブルに書き込まれたデータの create_time フィールドにすでに値が設定されていることがわかります。この値は、モデルの自動補完によって書き込まれます。

ThinkPHP3.1 クイックスタート (2) データ CURD

データがフォーム経由ではなく内部操作によって完全に書き込まれている場合 (つまり、データのセキュリティが完全に信頼できる場合)、次のように 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,

)

次に、テンプレートにデータを出力し、読み取りテンプレート ファイルを追加します

< tr>

}</td>

</tr>

< tr>それを表示するには、index.php/Form/read/id/1

特定のフィールドの値のみをクエリする必要がある場合は、getField メソッドを使用することもできます。例:

$Form = M("Form");

// タイトルを取得します

$title = $Form->where('id=3')-> ;getField('title');

上記の使用法は取得を意味しますID 値 3 のデータのタイトル フィールド値。実際、getField メソッドには多くの用途がありますが、特定のフィールドの値を取得するのが getField メソッドの最も一般的な用途です。

クエリ操作は、特に複雑なクエリ条件が含まれる場合に最も一般的に使用される操作です。クエリについては、クエリ言語の章で詳しく説明します。

データを更新します

データの書き込みと読み取りが正常に完了したら、データを編集できます。まず、次のように編集フォーム用のテンプレート ファイル edit.html を追加します。

タイトル:

内容: {$vo.content}


テンプレートの編集は、新しいフォームの追加とは異なります。テンプレートには変数を割り当てる必要があるため、今回は FormAction クラスに 2 つの操作メソッドを追加する必要があります。

public function edit($id=0){


$Form = M('Form'); this ->vo = $Form->find($id);

$this->display();

}

public function update(){

$Form = D('Form') ;

if($Form->create()) {

$result = $Form->save();

if($result) {

$this-> success('操作は成功しました! ' ; t;getError()) ;

}

}

完了したら、

にアクセスできます

http://localhost/app/index.php/Form/edit/id/1


データ更新操作では、ThinkPHP の save メソッドを使用して、create メソッドを使用して、フォームによって送信されたデータであり、save メソッドは現在のデータ オブジェクトをデータベースに自動的に更新します。更新条件は実際にはテーブルの主キーであるため、主キーの値を隠しフィールドとして送信します。編集ページで。
更新操作がフォームの送信に依存しない場合は、次のように記述できます:

$Form = M("Form");

// 変更するデータ オブジェクト属性の割り当て

$data; ['id'] = 5;

$data['title'] = 'ThinkPHP';

$data['content'] = 'ThinkPHP3.1 バージョンがリリースされました';

$Form->save($ data); // 条件に従って保存 変更された data

save メソッドは、データ オブジェクト内の主キー フィールドを自動的に識別し、それを更新条件として使用します。もちろん、更新条件を明示的に渡すこともできます:

$Form = M("Form");

// 変更するデータ オブジェクト属性を割り当てます

$data['title'] = 'ThinkPHP' ;

$data['content'] = 'ThinkPHP3.1 バージョンがリリースされました';

$Form->where('id=5')->save($data); // に従って変更されたデータを保存します。条件

オブジェクト モードに変更することもできます:

$Form = M("Form");

//変更するデータ オブジェクト属性を割り当てます

$Form->title = 'ThinkPHP';

$ Form->content = 'ThinkPHP3.1バージョンリリース';

$Form->where('id=5')->save() // 条件に従って変更したデータを保存

dataオブジェクトassign メソッド、save メソッドはデータを渡す必要がなく、自動的に認識されます。
save メソッドの戻り値は、影響を受けるレコードの数です。 false が返された場合は、更新エラーを意味します。

場合によっては、毎回 save メソッドを呼び出す代わりに、特定のフィールドの値を変更し、setField メソッドを使用するだけで済む場合があります。

$Form = M("Form");

//タイトルの値を変更する

$Form->where('id=5')->setField('title','ThinkPHP');

統計フィールドの場合、システムはより便利な setInc メソッドと setDec メソッドも提供します。
例:

$User = M("User"); // 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 メソッドを呼び出すだけです。 ->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 が提供するクエリ言語の使用方法を詳しく見ていきます。

上記は ThinkPHP3.1 クイックスタート (2) データ CURD の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。