Cakephpって複合キーNGだけど、検索するくらいなら問題無い ITかあさん

ITかあさん

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です。

初夏のJavaScript祭 in サーキュレーションビル ForPro