2012/09/23, 03:53 - IT
cakePHPの規約では、テーブルの主キーは ”id” という名前で固定になっているので、
これに沿わない規約でテーブル構築されている場合に scaffoldしたり、bakeでソースを生成するとうまく動かない。 ※version 1.x 系では、各Modelに設定を入れると動くようだが、v2.2ではダメだった。 (設定が間違ってただけかもしれない・・というか、きっと間違っていた気がするが。) そこで、微妙にソースを弄ってみると、うまくいった。 例えば ・主キー名は ”テーブル名_id” ・テーブル名は複数形 という規約でテーブルが作られている場合 ◆弄る箇所 ソース:lib/Cake/Model/Model.php ※app配下のLibではありません メソッド:コンストラクタ(__construct) [変更前] -------------------------- if ($this->primaryKey === null) { $this->primaryKey = 'id'; } -------------------------- [変更後] -------------------------- $tableName = strtolower($this->alias); if (substr($tableName,strlen($tableName)-3) == "ies") { $this->primaryKey = substr($tableName,0,strlen($tableName)-3)."y_id"; } else if (substr($tableName,strlen($tableName)-1) == "s") { $this->primaryKey = substr($tableName,0,strlen($tableName)-1)."_id"; } else { $this->primaryKey = substr($tableName,0)."_id"; } -------------------------- だいたいこんな感じで弄ると、うまくいく。 これで、規約がバチッと固まっている場合は、個別にModelを弄らなくてもよいのでラクだ。 というか「俺たちはこの規約なんだ!」って場合ならCoC的な利点も活かせるので、こっちの方が良い気がする。(あくまでも私見) ただし、他にどんな影響があるのかは不明。シーン。。 | このエントリーのURL
|