CAKEPHP入門3 データベース
データベース
mySQLを利用する。
「app」「config」にあるdatabase.phpをまず修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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' => '', ); } |
port,login,passwordはサーバー任意のモノを入力してください。
まずはモデルを作成します。
「app」「models」のフォルダの中にファイルを作ります。
1 2 3 4 5 6 7 8 9 10 11 | <?php class Board extends AppModel{ var $name='Board'; } ?> |
作成するファイル名は使用するデータベースのテーブル名と同じものにします。
次にコントローラ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php class BoardsController extends AppController{ public $name = 'Boards'; function index(){ $data = $this->Board->find('all'); $this -> set('data',$data); } } ?> |
モデルのメソッドを呼び出し($name)、ビュー渡しています。(set)
モデルはコントローラの中ではメンバ変数として利用することができます。今回は「$this->Board」の形で利用しています。「find」はモデルクラスのメソッドになります。
最後にビューです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
コントローラから受け取った「$data」を使っています。
HTMLヘルパーを使っています。
おまけ
scaffoldを使えば、モデルとビューなしでデータベース管理するためのシステムを自動生成してくれます。
1 2 3 4 5 6 7 8 9 10 | <?php class BoardsController extends AppController{ public $name = 'Boards'; public $scaffold; } ?> |
データベースの操作
レコードの追加
コントローラ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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('.'); } } ?> |
ビュー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?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(); ?> <br/> <hr /> <br/> <table> <?php for($i=0;$i < count($data);$i++){ echo $html->tableCells($data[$i]['Board'],array(),array(),true); } ?> </table> |
レコードの検索
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?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); } } ?> |
大きくはコントローラーが変わっています。
find(第一引数、第二引数)
- 第一引数:all,first,list,countなど。
- 第二引数:連想配列でまとめたもの。今回はconditionsは条件を設定しています。入力されたBoard.idに対して等しい値をdata['Board']['id']からの抽出しています。



