ホームページ > バックエンド開発 > PHPチュートリアル > ThinkPHP3.1 データ CURD 操作クイックスタート_PHP チュートリアル

ThinkPHP3.1 データ CURD 操作クイックスタート_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:24:28
オリジナル
981 人が閲覧しました

1.CURD の概要:

CURDとはデータベーステクノロジーの略称で、一般的なプロジェクト開発における各種パラメータの基本的な機能を指します。これは、作成、更新、読み取り、および削除の操作を表します。 CURD は、データを処理するための基本的なアトミック操作を定義します。 CURD が技術的に難しいレベルにまで引き上げられている理由は、複数のデータベース システムで CURD 操作を含む集計関連アクティビティを完了するパフォーマンスが、データ関係の変化に応じて大きく異なる可能性があるためです。

CURD は、特定のアプリケーションで作成、更新、読み取り、および削除メソッドを必ずしも使用するわけではありませんが、それらが実行する機能は同じです。たとえば、ThinkPHP は、add、save、select、および delete メソッドを使用して、モデルの CURD 操作を表します。

2. データを作成します

ほとんどの場合、CURD の Create 操作は通常、フォームを通じてデータを送信します。まず、次の内容の add.html テンプレート ファイルをプロジェクトの Tpl/Form ディレクトリに作成します。

リーリー
次に、プロジェクトの Action ディレクトリに FormAction.class.php ファイルを作成する必要があります。当面は、FormAction クラスを定義するだけでよく、操作メソッドを追加する必要はありません。コードは次のとおりです。以下:

リーリー
次にアクセスしてください:

リーリー
コントローラーに追加操作メソッドを定義していませんが、明らかにアクセスは正常です。対応する操作メソッドが見つからない場合、ThinkPHP は対応するテンプレート ファイルが存在するかどうかを確認するため、対応する追加テンプレート ファイルがあるため、コントローラーはテンプレート ファイルを直接レンダリングして出力します。したがって、実際のロジックを持たない操作メソッドの場合は、対応するテンプレート ファイルを直接定義するだけで済みます。

フォームで定義された送信アドレスが Form モジュールへの挿入操作であることがわかります。フォーム送信データを処理するには、次のように FormAction クラスに挿入操作メソッドを追加する必要があります。
リーリー

主キーが自動インクリメント型の場合、addメソッドの戻り値は主キーの値になります。自動インクリメント主キーでない場合、戻り値は挿入されたデータの数を示します。 false が返された場合は、書き込みエラーを示します。

3. モデル

テストを容易にするために、まずデータベースに think_form テーブルを作成します。

リーリー

挿入操作メソッドではD関数を使用しましたが、M関数とは異なり、D関数には対応するモデルクラスが必要です。モデルクラスの定義仕様は次のとおりです:
モデル名 + Model.class.php (モデル名はキャメルケースで定義され、最初の文字は大文字になります)

プロジェクトの Lib/Model ディレクトリに FormModel.class.php ファイルを作成し、次のコードを追加します。
リーリー

主にフォームの自動検証と自動入力に使用されます。具体的な使用方法については、別のスペースで別途説明しますので、ここでは省略します。理解する必要があるのは、D 関数を使用してモデル クラスをインスタンス化する場合、通常はデータ モデル クラスに対応する必要があり、create メソッドがフォームによって送信されたデータ (定義されている場合) を自動的に検証して自動的に完成させることだけです。 )、自動検証が失敗した場合、モデルの getError メソッドを通じて検証プロンプト情報を取得できます。検証に合格した場合は、データ オブジェクトが正常に作成されたことを意味しますが、現時点では add を呼び出すまでのみメモリに保存されます。データをデータベースに書き込むメソッド。これで完全な作成操作が完了したため、ThinkPHP がデータ作成プロセスで 2 つのステップを使用していることがわかります:
最初のステップは、create メソッドを使用してデータ オブジェクトを作成することです

2 番目のステップでは、add メソッドを使用して、現在のデータ オブジェクトをデータベースに書き込みます。

もちろん、最初のステップをスキップして 2 番目のステップに直接進むこともできますが、この種の前処理にはいくつかの利点があります:

1. フォームがどれほど複雑であっても、create メソッドは 1 行のコードで簡単にデータ オブジェクトを作成できます。 2. データを書き込む前に、データを検証して補足できます

実際、create メソッドには多くの機能操作があり、目的は 1 つだけです。それは、データベースに書き込まれるデータが安全かつ有効であることを確認することです。

タイトルを入力せずにフォームを直接送信すると、システムはタイトルは次のようにする必要があるというプロンプトメッセージを表示します。
フォームが正常に送信されると、データ テーブルに書き込まれたデータの create_time フィールドにすでに値が設定されていることがわかります。これは、モデルの自動補完によって書き込まれています。

データがフォーム経由ではなく完全に内部で書き込まれている場合 (つまり、データのセキュリティを完全に信頼できる場合)、次のように add メソッドを直接使用できます:


リーリー

オブジェクトモード操作もサポートできます:

リーリー

对象方式操作的时候,add方法无需传入数据,会自动识别当前的数据对象赋值。

4.读取数据

当我们成功写入数据后,就可以进行数据读取操作了。在前面一篇中,我们已经知道可以用select方法获取数据集,这里我们来通过find方法获取一个单一数据,定义read操作方法如下:

public function read($id=0){
  $Form  =  M('Form');
  // 读取数据
  $data =  $Form->find($id);
  if($data) {
    $this->data =  $data;// 模板变量赋值
  }else{
    $this->error('数据错误');
  }
  $this->display();
 }

ログイン後にコピー

read操作方法有一个参数$id,表示我们可以接受URL里面的id变量(后面我们会在变量章节详细描述。这里之所以用M方法而没有用D方法,是因为find方法是基础模型类Model中的方法,所以没有必要浪费开销去实例化FormModel类(即使已经定义了FormModel类)。我们通常采用find方法读取某个数据,这里使用了AR模式来操作,所以没有传入查询条件,find($id) 表示读取主键为$id值的数据,find方法的返回值是一个如下格式的数组:

array(
  'id'    => 5,
  'title'   => '测试标题',
  'content'  => '测试内容',
  'status'  => 1,
 )

ログイン後にコピー

然后我们可以在模板中输出数据,添加一个read模板文件:

<table>
 <tr>
  <td>id:</td>
  <td>{$data.id}</td>
 </tr>
 <tr>
  <td>标题:</td>
  <td>{$data.title}</td>
 </tr>
 <tr>
  <td>内容:</td>
  <td>{$data.content}</td>
 </tr>
 </table>

ログイン後にコピー

完成后,我们就可以访问

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

ログイン後にコピー

来查看了。
如果你只需要查询某个字段的值,还可以使用getField方法,例如:

$Form = M("Form"); 
 // 获取标题 
$title = $Form->where('id=3')->getField('title');

ログイン後にコピー

上面的用法表示获取id值为3的数据的title字段值。其实getField方法有很多用法,但是获取某个字段的值是getField方法最常规的用法。
查询操作是最常用的操作,尤其是涉及到复杂的查询条件,我们会在查询语言一章对查询进行更加详细的讲解。

5.更新数据

在成功写入并读取数据之后,我们就可以对数据进行编辑操作了,首先我们添加一个编辑表单的模板文件edit.html,如下:

 <FORM method="post" action="__URL__/update">
  标题:<INPUT type="text" name="title" value="{$vo.title}"><br/>
  内容:<TEXTAREA name="content" rows="5" cols="45">{$vo.content}</TEXTAREA><br/>
  <INPUT type="hidden" name="id" value="{$vo.id}">
  <INPUT type="submit" value="提交">
 </FORM>

ログイン後にコピー

编辑模板不同于新增表单,需要对模板进行变量赋值,所以,我们这次需要在FormAction类添加两个操作方法:

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('操作成功!');
    }else{
      $this->error('写入错误!');
    }
  }else{
    $this->error($Form->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); // 根据条件保存修改的数据

ログイン後にコピー

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(); // 根据条件保存修改的数据

ログイン後にコピー

数据对象赋值的方式,save方法无需传入数据,会自动识别。
save方法的返回值是影响的记录数,如果返回false则表示更新出错。

有些时候,我们只需要修改某个字段的值,就可以使用setField方法,而不需要每次都调用save方法。

$Form = M("Form"); 
 // 更改title值
$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

ログイン後にコピー


6.删除数据

删除数据很简单,只需要调用delete方法,例如:

$Form = M('Form');
$Form->delete(5);

ログイン後にコピー

表示删除主键为5的数据,delete方法可以删除单个数据,也可以删除多个数据,这取决于删除条件,例如:

$User = M("User"); // 实例化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表示没有删除任何数据。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/825433.htmlTechArticle1.CURD概述: CURD是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是CURD。它代表创建(Create)、更新(Update)、读取...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート