Cakephpって複合キーNGだけど、検索するくらいなら問題無い
Cakephpって複合キーNGだけど、検索するくらいなら問題無い
Cakephpは複合キーは使えないらしい。そんなことは今日の今日知りました。CakePHPerとして恥ずかしいです。
これによると、
CakePHP は複合主キーをサポートしません。 join テーブルのデータを直接操作したい場合は、直接 query を呼び出すか、通常のモデルのように振舞えるよう主キーを追加してください。
と、あります。
中には無理やりやってしまわれる方もおられるようですが、けっこう面倒なようです。
でも実は検索するくらいなら問題無い
仮にこのようテーブルがあったとします。赤字は複合プライマリーキーです。
CREATE TABLE IF NOT EXISTS `schedules` (
`workday` date NOT NULL,
`person_id` int(11) unsigned NOT NULL,
`start` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
PRIMARY KEY (`workday`,`person_id`),
KEY `person_id` (`person_id`),
KEY `workday` (`workday`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Cakephpの規約に反したテーブルを利用する時はどうしたでしょうか?
過去にこんな記事を書いたことがあります。
その癖もありまして、modelをこのように記述していたのですが
class Schedule extends AppModel { var $name = 'Schedule'; function __construct() { $id = array("id"=>false, "table"=>"schedules", ); } }
これすらする必要は無く、普通のmodelを作成するときと同様でした。
$con = array( 'limit' => 5, ); $Schedule = $this->Schedule->find('all',$con);
普通に検索することが出来ました。bindして、テーブルを結合する場合も全く同様でした。
まあ、データ登録は相当厳しいんですけどね。
なお、今回試したのはCakephp1.3.14です。