CakePHPで規約に沿わないDBを使うこのエントリをはてなブックマークに追加

11 月 6, 2008

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を作る。

<?php
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を指定しておきます。

あとは、いつも通りにコントローラで使うだけ。

<?php
class UserInfomationController extends AppController {
    var $name = 'UserInfomation';
    var $uses = array("UserInformation");

    function index() {
       $result = $this->UserInformation->findAll();
    }
}
?>

これで$resultは最初にインサートした、2つのデータ全部取得できます。簡単ですね。

しかし、このmodelだと保存(save)ができないので、modelを一部修正する。

<?php
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内ではちょっと違った指定の仕方をします。

<?php
    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: cakephp
Tags:

コメントはまだありません »

このコメント欄の RSS フィードトラックバック URL

コメントはまだありません。

コメントをどうぞ