3.7.2 データベースのテーブルを作成する

CakePHP はデータベースドリブンではないデータソースを持っていますが、多くの場合データベースドリブンとなります。CakePHP は不可知論的にデザインされていて、MySQL, MSSQL, Oracle, PostgreSQL やその他のデータベースで動作します。通常のようにデータベースのテーブルを生成することができます。モデルクラスを作成すると、自動的に作成したテーブルにマップされます。

テーブル名は、慣習的に小文字で、アンダースコアで区切られた複数単語のテーブル名をもちます。たとえば、Ingredient のモデル名は ingredients というテーブル名だと予測します。EventRegistration というモデル名は、event_registrations というテーブル名だと予測します。CakePHP はテーブルを検索し、各フィールドのデータ型を決定し、この情報を使用してビューでフォームのフィールドを出力するといったさまざまな特徴を自動化します。

フィールド名は慣習として小文字でアンダースコアで区切られます。

モデルとテーブル名の関連は、モデルの useTable プロパティでオーバーライドできます。この章の最後に説明します。

このセクションの残りでは、CakePHP が どのようにデータベースのフィールドの型と PHP のデータ型とをマッピングするか、フィールドの定義に基づいてどのようにタスクを自動化するかを見ていきます。

3.7.2.1 タイトル

体感として、オブジェクトは名前やタイトルをもっていて、それを使用して何かを説明しています。人は、John・Mac・Buddy のような名前をもっています。ブログの投稿にはタイトルがあります。カテゴリは名前をもっています。

title または name フィールドを指定すると、CakePHP は自動的にさまざまな状況でこのラベルを使用します:

  • Scaffolding — ページタイトル, フィールドのラベル
  • Lists — 通常 <select> のドロップダウンリストに使用します
  • TreeBehavior — reordering, ツリービュー

テーブルにタイトル かつ 名前のフィールドがある場合、タイトルが優先されます。

3.7.2.2 created と modified

データベースのテーブル内で datetime フィールドとして created または modified フィールドを定義すると、CakePHP はそれらのフィールドを認識し、レコードが作製されたり、データベースに保存されてりしたときに自動的に埋め込まれます。

createdmodified フィールドは、レコードが一番初めに追加されたときに、現在日時をセットします。modified フィールドは、すでに存在するレコードが保存されたときに、現在日時で更新されます。

注意: フィールド名 updatedmodified と同じ振る舞いをします。これらのフィールドは、datetime フィールドである必要があり、デフォルト値として CakePHP で認識される NULL をセットします。

3.7.2.3 プライマリーキーとして UUID を使用する

プライマリーキーは、通常 INT フィールドとして定義されます。データベースは、新しいレコードが追加されるたびに自動的にフィールドをインクリメントし、1から始まります。あるいは、CHAR(36) としてプライマリーキーを指定した場合、CakePHP は、新しいレコードが作製されたときに、自動的に UUIDs を生成します。

UUID は4つのハイフンで区切られた 32 バイトの文字列で、トータル 36 文字になります。たとえば次のようなものです:

550e8400-e29b-41d4-a716-446655440000
  1. 550e8400-e29b-41d4-a716-446655440000

UUID は、単一テーブル内ではなくテーブルやデータベースを超えた単位でユニークになるように設計されています。システム間でフィールドをユニークにする必要がある場合、UUID はすばらしいアプローチになります。