4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CakePHP2でModel名の複数形を間違えていてエラー。

Last updated at Posted at 2016-03-25

#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';  //ここを追加

}
?>

動きました。
まさか英語力でつまずくとは。

4
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?