CAKEPHP入門3 データベース

データベース

mySQLを利用する。 「app」「config」にあるdatabase.phpをまず修正します。

[cc lang="php"] class DATABASE_CONFIG {

var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'port' => '', 'login' => '', 'password' => '', 'database' => 'mydata', 'prefix' => '', 'schema'=>'', 'encoding'=>'UTF-8' );

var $test = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'test_database_name', 'prefix' => '', ); } [/cc] port,login,passwordはサーバー任意のモノを入力してください。

まずはモデルを作成します。 「app」「models」のフォルダの中にファイルを作ります。

[cc lang="php"] <?php

class Board extends AppModel{

var $name='Board';

}

?>

[/cc]

作成するファイル名は使用するデータベースのテーブル名と同じものにします。

次にコントローラ [cc lang="php"] <?php

class BoardsController extends AppController{

 public $name = 'Boards';

 function index(){

     $data = $this->Board->find('all');
     $this -> set('data',$data);

 }

} ?> [/cc]

モデルのメソッドを呼び出し($name)、ビュー渡しています。(set) モデルはコントローラの中ではメンバ変数として利用することができます。今回は「$this->Board」の形で利用しています。「find」はモデルクラスのメソッドになります。

最後にビューです。 [cc lang="php"]

送信フォームサンプル

tableCells($data[$i]['Board'],array(),array().true); } ?>

[/cc]

コントローラから受け取った「$data」を使っています。 HTMLヘルパーを使っています。

おまけ

scaffoldを使えば、モデルとビューなしでデータベース管理するためのシステムを自動生成してくれます。 [cc lang="php"] <?php

class BoardsController extends AppController{

 public $name = 'Boards';
 public $scaffold;

} ?> [/cc]

データベースの操作

レコードの追加

コントローラ [cc lang="php"] <?php

class BoardsController extends AppController{

 public $name = 'Boards';

 function index(){

     $data = $this->Board->find('all');
     $this->set('data',$data);

 }

 function addRecord(){

     if(!empty($this->data)){

         $this->Board->save($this->data);
     }

     $this->redirect('.');
 }

} ?> [/cc]

ビュー [cc lang="php"] <?php

echo $form->create(null,array('type'=>'posr','action'=>'./addRecord')); echo $form->text("Board.name"); echo $form->text("Board.title"); echo $form->textarea("Board.content"); echo $form->submit("送信"); echo $form->end();

?>




tableCells($data[$i]['Board'],array(),array(),true); } ?>

[/cc]

レコードの検索

[cc lang="php"] <?php

class BoardsController extends AppController{

 public $name = 'Boards';

 function index(){

     $data=null;
     if(!empty($this->data)){
         $data = $this->Board->find('all',array('conditions' =>
         array('Board.id' => $this->data['Board']['id'])));
     }else{
         $data=$this->Board->find('all');

     }


     $this->set('data',$data);
 }

}

?> [/cc]

大きくはコントローラーが変わっています。 find(第一引数、第二引数)

  • 第一引数:all,first,list,countなど。
  • 第二引数:連想配列でまとめたもの。今回はconditionsは条件を設定しています。入力されたBoard.idに対して等しい値をdata['Board']['id']からの抽出しています。