CakePHP3でModelの指定方法や、find()して帰ってくるデータのフォーマットがCakePHP3依然と大きく変わりました。
めちゃくちゃ混乱します。
ちょっとまとめました。
バージョン
CakePHP3.x
前知識
モデルをUserだとすると。
モデル名単数形はUser <-大文字単数形
モデル名複数形はUsers <-大文字複数形
テーブル名はusers という感じで、全部小文字で複数形になります。
なお、複数ワードであらわされる場合は、
UsersInfo
UsersInfos
users_infos
といった感じで、大文字ベースの場合はワードの先頭を大文字で、小文字ベースの場合はハイフンでつなぎます。
ということで、ワードの先頭が大文字になるか?全部小文字か、複数形か?単数形かの4パターンがあるわけですが、それぞれの場合でどうなるか
テーブル名
小文字複数形で記載します。
コントローラー
/src/Controller/大文字複数形Controller.php
クラス名
class 大文字複数形Controller extends AppController
コントローラ内でモデルの指定やアソシエーションの指定(associatedとかcontainとか)は基本的に大文字複数形で書きます。
find()で帰ってきたデータに関しては、基本的に小文字ベースになります。
また、アソシエーション先の項目名に関してですがリレーションの方法によって複数形の場合と単数形の場合があり、具体的には
hasOne,belongsToは小文字単数形に、hasMany,belongsToManyは小文字複数形になります
リダイレクトなどで、コントローラー名を書く場合は、大文字小文字どちらでもいいようですが、複数形になります。
ただし、小文字ベースで書く場合でコントローラー名が複数ワードの場合、ワードの間はハイフンでつなぐ必要があるようです。
ややこしいので、リンク系は大文字複数形で統一したほうがいいと思います。
ex. user-infos
テーブル
/src/Model/Table/大文字複数形Table.php
クラス名
class 大文字複数形Table extends Table
$_accessibleでアクセス権を指定する場合は全部小文字ベース。
アソシエーションはbelogsTo系は単数、hasMany系は複数形で書きます
エンティティ―
/src/Model/Entity/大文字単数形.php
クラス名
class 大文字単数形Table extends Table と定義
アソシエーションはすべて大文字複数形で記載します。(アソシエーションの種類に関係なく複数形です!)
テンプレート
/src/Template/大文字複数形/
リンク先などのコントローラー名は大文字でも小文字でもOKだが複数形で書きます。※コントトーラー名に合わせる、大文字複数形で書いたほうが間違いが少ないかと思う
Formでクラス名を指定する場合は小文字ベースでアソシエーションの種類により単数形、複数形で書くようです。
とりあえず、わかんなくなったらfind()で引っ張ってきたときと同じ形になるように書いてあげればOKです。
単数形とか複数形とか、ぶっちゃけいらなくね?
と、大体こんな感じです。。。。
CakePHP2とまた微妙に違うのも混乱ポイント。
正直覚えきれないので、基本はbakeで吐かせて作ってもらうのが吉。後か何か追加したい場合は…まぁ頑張りましょう。
なんでこんなややこしいことにしたのか理解に苦しみます。全部統一してくれればいいのに。
そもそも単数形とか複数形とか、ぶっちゃけいらない。カラム名を英語にするとは限らないし。英語圏の奴らは、非英語圏のことを全く分かってくれないんですよね…。困ったものです。
関連記事