ZendFramework

Zend_Db_Table_Rowによるレコードの操作

更新日:

Zend_Db_Tableでレコードを取得すると配列ではなく、『Zend_Db_Table_Row』というクラスのインスタンスとしてレコード情報が返されます。このZend_Db_Table_Rowは、レコード情報を管理するためのクラスで、ZendFrameworkにはZend_Db_Table_Row_Abstractという抽象クラスがあり、このサブクラスとしてZend_Db_Table_Rowが用意されています。

今日は、このZend_Db_Table_Rowを使って、『追加』『更新』『削除』の各アクションaddAction,editAction,delActionを変更したいと思います。

addActionメソッドの変更

1) createRowで、Zend_Db_Table_Rowのインスタンスを取得します。このcreateRowは引数に渡した配列(POST送信で受け取った配列$data)を各フィールドの値として保持するZend_Db_Table_Rowのインスタンスを作成します。

$data=$this->Dvdcollections->createRow($data);

2) Zend_Dbでレコードの挿入は、$this->db->insert(テーブル名、配列データ)でしたが、Zend_Db_Table_Rowでは、配列->save()だけでレコードを挿入することが出来ます。

$data->save();

3) 下記に修正後のaddActionを記述します。

public function addAction(){
 $errors=array();
 $form=$this->createAddForm();
 $this->view->assign('form',$form);
 //POST送信されたら
 if($this->getRequest()->isPost()){
 //検証OKなら
 if($form->isValid($_POST)){
 $title=$this->getRequest()->getParam('title');
 $content=$this->getRequest()->getParam('content');
 $data = array(
 'title' =>$title,
 'content' =>$content
 );
 //Zend_Db_Table_Rowのインスタンス取得
 $data=$this->Dvdcollections->createRow($data);
 //データベースにレコードを保存
 $data->save();
 //$this->db->insert('dvd_collections',$data);
 //indexにリダイレクトします
 $this->_redirect('test/index');
 }
 }
 }

editActionメソッドの変更

4) これは、編集するレコードのidを指定してaddActionと同じように配列->save()するだけです。

5) 変更後の、editAcitonを下記に記述します。尚、このeditActionでは、バリデーション処理をしていませんが、データ更新時に、データを空白にして更新などが出来ますので、これも実際にはバリデーション処理はするべきでしょう。

public function editAction(){
 //変数idに送信されたidを代入する
 $id=$this->getRequest()->getParam('id')*1;
 if($id <= 0){
 throw new Zend_Exception('レコードが見つかりません');
 }
 //Zend_Db_Table_Rowでidの一致するデータを取得します
 $select=$this->Dvdcollections->select()->where('id=?',$id);
 //fetchRowメソッドで最初の1レコードを取得します。
 $data=$this->Dvdcollections->fetchRow($select);
 //POSTデータが送信された場合の処理
 if($this->getRequest()->isPost()){
 //配列dataに送信されたデータを代入する
 $data->title=$this->getRequest()->getParam('title');
 $data->content=$this->getRequest()->getParam('content');
 //Dvd_Tabale_Rowで保存する
 $data->save();
 //indexにリダイレクトする
 $this->_redirect('test/index');
 //POSTデータが送信されていない場合の処理
 }else{
 //ビューにデータを配列で渡します
 $this->view->assign('result',$data);
 }
 }

delActionメソッドの変更

6) これは、配列->delete()で簡単にデータを削除することができます。delActionを下記に記述します。

public function delAction(){
 //変数idに送信されたidを代入する
 $id=$this->getRequest()->getParam('id')*1;
 if($id <= 0){
 throw new Zend_Exception('レコードのIDが見つかりません');
 }
 //Zend_Dv_Table_Rowでidの一致するレコードの取得
 $select=$this->Dvdcollections->select()->where('id=?',$id);
 $data=$this->Dvdcollections->fetchRow($select);
 //POSTデータが送信された場合の処理
 if($this->getRequest()->isPost()){
 //Zend_Db_table_Rowでデータの削除
 $data->delete();
 $this->_redirect('test/index');

 }else{
 $this->view->assign('result',$data);
 }
 }

本日は以上です。

-ZendFramework
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.