CakePHPで規約に沿わないDBを使う
Cakeのmodelは基本的に、テーブル名は複数形、primary keyはidを色々な規約がありますが、
それに沿わないアプリケーションの場合どうやって使うのかなーなんて思ってソース読みながら、試行錯誤したら以外とあっさりできたのでメモ。
ちなみに、cakeはcake_1.2.0.7692-rc3で試してます。
テーブル
create table user_information ( info_id INT(11) unsigned NOT NULL, name VARCHAR(255) NOT NULL default "", PRIMARY KEY (info_id) ); INSERT INTO user_information (info_id, name) VALUES (1,"test"),(2,"test2");
user_informationというテーブルを作るが、複数形でもないし、idも持っていない。
user_information.phpというmodelを作る。
class UserInformation extends AppModel { var $name = 'UserInformation'; function __construct() { $id = array("id"=>false, "table"=>"user_information", ); parent::__construct($id); } }
何も難しいところはなし!Cakeの本体ソース読めばわかると思うけど、コンストラクタで、nameやらaliasやらtable名を変更できる。ので、上書きしているだけ。っつーかidはいらねーな。ちなみにidはUPDATE用だと思う。詳しく調べてないので、デフォルトの
falseを指定しておきます。
あとは、いつも通りにコントローラで使うだけ。
class UserInfomationController extends AppController { var $name = 'UserInfomation'; var $uses = array("UserInformation"); function index() { $result = $this->UserInformation->findAll(); } }
これで$resultは最初にインサートした、2つのデータ全部取得できます。簡単ですね。
しかし、このmodelだと保存(save)ができないので、modelを一部修正する。
class UserInformation extends AppModel { var $name = 'UserInformation'; function __construct() { $id = array("id"=>false, "table"=>"user_information", ); parent::__construct($id); $this->primaryKey = "info_id"; // 追加 } }
primaryKeyを、そのテーブルのprimaryKey名で指定する。
これは、コンストラクタで上書きできないようになってるので、この方法しかなさげ。(ちなみにデフォルトでidになるようになっている)
で、あとはいつもの通りのsave!!・・・というわけにもいかず。
controller内ではちょっと違った指定の仕方をします。
function hozon() { $save_data["UserInformation"] = array("info_id"=>3,"name"=>"test3"); //ここ注意 $this->UserInformation->create(); $this->UserInformation->save($save_data); die(); }
基本の型は同じなのですが、注意はarray(”info_id”=>3,”name”=>”test3″);この部分。
カラム名=>値の配列で渡してあげないとsaveしてくれませんので、注意。
とりあえず基本のfindとsaveができるようになりましたね。
以外と簡単に置き換えられたので、既存のアプリの移動も簡単そうかも。
ほかの関数は必要になったら調べますー。
Categories: cakephpTags: cakephp
コメントはまだありません »
このコメント欄の RSS フィード — トラックバック URL
コメントはまだありません。
コメントをどうぞ