#cakephp2のモデルとDBの関係性
cakephp2ではモデルとDBのテーブルが1:1で対応している。
そしてその対応は単数形<=>複数形らしい。
モデル :post (単数形)
テーブル:posts(複数形)
みたいに。
この複数形<=>単数形の関係で詰まったのでメモ。
結論から言うと、僕の英語力が弱かった。
#Dataの複数形は?
Dataモデルを作成してみた。
<?php
App::uses('AppModel', 'Model');
class Data extends AppModel {
}
?>
複数形はdatasかなと思い、DBのテーブルに作った。動かしてみると下記エラー。
Error: Table data for model Data was not found in datasource default.
ネットでこのエラーで調べると、modelがキャッシュされてるので、/app/tmp/を消せとか出てくるのが試しても上手くいかず。
うーんと思ってエラーメッセージをよく見ると、「data」テーブルを参照しにいっている。
var_dumpでDataModelオブジェクトを出力する。
object(Data)#28 (41) { ["useDbConfig"]=> string(7) "default" ["useTable"]=> string(4) "data"
~~~~
useTableが"data"になってる・・・。
あれ・・・?
もしかして、dataの複数形って、と思って調べる。
http://www.thiroe.net/?p=152
dataはdatumの複数形らしい。つまり、dataという単語自体が複数形なので、それを複数形とするdatasという単語は存在しないとのこと。
あらら・・・。
テーブル構造に手を加えたく無いので、Modelが参照するテーブルをコードの修正で対応。
<?php
App::uses('AppModel', 'Model');
class Data extends AppModel {
var $useTable = 'datas'; //ここを追加
}
?>
動きました。
まさか英語力でつまずくとは。