PHPの1.X系と、2.X系で何が違うのか
同じものを作って比較してみる。
前回までで、1.Xと2.Xで、モデルを使わない形での話だったので、
今回は、モデルを使って、1.X系でのお話をする
■お題
その1
http://blog.goo.ne.jp/xmldtp/e/493d369c8d635b3a269d4e02dcc7ae95
と同じお題なのだが、
RDBのMySQL内(データベース名test)に、
usersというテーブルがあって、
こんな感じ
![]()
で、項目(id,user_name,kaisuの3項目)とデータが入っている。
これを検索し、
入力された名前がDBのuser_nameと一致したら、
そのデータのkaisuに1を足して表示
入力された名前がDBのuser_nameになかったら
1回目と表示して
データをDBに保存する。
■追加・修正部分
今回は、モデル部分を追加する(基本的にcakePHPの命名規約[2]に準拠)。
また、コントローラー部分(my_test_controller.php)を修正することになる。
とくに、コントローラー名とモデル名が違うケースとなる。
ファイル構造は、以下のとおり
app
|
|-controllers
| |
| *−my_test_controller.php
|
|-models
| |
| *−user.php
|
*- views
|
*−my_test
|
|−hello.ctp
|
*−index.ctp
赤字が変更・追加部分
■追加・修正ファイル
変更・追加したファイル(上記の赤字)のみ掲載する。変わらないViewについては、
その1を参照
●コントローラー部分の修正my_test_controller.php
<?php class MyTestController extends AppController { var $name = 'MyTest'; public $uses = 'User'; public function index() { } public function hello() { // 画面引数の取得 $yourname =$this->params['form']['yourname']; // DBアクセスして値取得 $condition = array("user_name" => $yourname); $records = $this->User->find("first",array("conditions" => $condition)); if ( count($records['User']) > 0 ) { $kaisu = $records['User']['kaisu'] + 1; // DBアクセスして更新 $data['User'] = array('id' => $records['User']['id'], 'kaisu' => $kaisu); $fields = array('kaisu'); $this->User->save($data, false, $fields); } else { $kaisu = 1; // DBアクセスして追加 $data['User'] = array('user_name' => $yourname, 'kaisu' => 1); $this->User->save($data); } // Viewに設定 $this->set('yourname',$yourname); $this->set('kaisu',$kaisu); } }
●モデル部分の追加user.php
<?php
class User extends AppModel{
var $name = 'User';
}
参考文献[1][3]を参考に作成
■参考文献
[1]CakePHPのModelを使う データベース関連処理をシンプルに解決
http://puyo2.upper.jp/cake/files/cakephp4.pdf
[2]cakePHP クラス名、モデル名の命名ルール
http://www.wakatta-blog.com/cakephp_2.html
[3]CakePHPのfind, findAll, findCount, delete, deleteAll
http://techracho.bpsinc.jp/piichan1031/2009_01_21/132
同じものを作って比較してみる。
前回までで、1.Xと2.Xで、モデルを使わない形での話だったので、
今回は、モデルを使って、1.X系でのお話をする
■お題
その1
http://blog.goo.ne.jp/xmldtp/e/493d369c8d635b3a269d4e02dcc7ae95
と同じお題なのだが、
RDBのMySQL内(データベース名test)に、
usersというテーブルがあって、
こんな感じ

で、項目(id,user_name,kaisuの3項目)とデータが入っている。
これを検索し、
入力された名前がDBのuser_nameと一致したら、
そのデータのkaisuに1を足して表示
入力された名前がDBのuser_nameになかったら
1回目と表示して
データをDBに保存する。
■追加・修正部分
今回は、モデル部分を追加する(基本的にcakePHPの命名規約[2]に準拠)。
また、コントローラー部分(my_test_controller.php)を修正することになる。
とくに、コントローラー名とモデル名が違うケースとなる。
ファイル構造は、以下のとおり
app
|
|-controllers
| |
| *−my_test_controller.php
|
|-models
| |
| *−user.php
|
*- views
|
*−my_test
|
|−hello.ctp
|
*−index.ctp
赤字が変更・追加部分
■追加・修正ファイル
変更・追加したファイル(上記の赤字)のみ掲載する。変わらないViewについては、
その1を参照
●コントローラー部分の修正my_test_controller.php
<?php class MyTestController extends AppController { var $name = 'MyTest'; public $uses = 'User'; public function index() { } public function hello() { // 画面引数の取得 $yourname =$this->params['form']['yourname']; // DBアクセスして値取得 $condition = array("user_name" => $yourname); $records = $this->User->find("first",array("conditions" => $condition)); if ( count($records['User']) > 0 ) { $kaisu = $records['User']['kaisu'] + 1; // DBアクセスして更新 $data['User'] = array('id' => $records['User']['id'], 'kaisu' => $kaisu); $fields = array('kaisu'); $this->User->save($data, false, $fields); } else { $kaisu = 1; // DBアクセスして追加 $data['User'] = array('user_name' => $yourname, 'kaisu' => 1); $this->User->save($data); } // Viewに設定 $this->set('yourname',$yourname); $this->set('kaisu',$kaisu); } }
●モデル部分の追加user.php
<?php
class User extends AppModel{
var $name = 'User';
}
参考文献[1][3]を参考に作成
■参考文献
[1]CakePHPのModelを使う データベース関連処理をシンプルに解決
http://puyo2.upper.jp/cake/files/cakephp4.pdf
[2]cakePHP クラス名、モデル名の命名ルール
http://www.wakatta-blog.com/cakephp_2.html
[3]CakePHPのfind, findAll, findCount, delete, deleteAll
http://techracho.bpsinc.jp/piichan1031/2009_01_21/132