CakePHP3では、データベースの扱いがそれまでのCakePHP2から大きく変わりました。より柔軟でわかりやすい開発が行えるように使用変更がされたのです。
データベースに関する機能は、「
モデル(Model)」と呼ばれるものとして実装されます。MVCアーキテクチャーの「M」ですね。ver. 2では、このモデルのクラスを1つ作ればそれでOKでした。
が、ver. 3からは違います。モデルは、「
エンティティ」と「
テーブル」から構成されるようになっています。
「
エンティティ」は、テーブルのデータをPHPクラスに抽象化したものです。PHPの側では、(データベースのテーブルに、レコードとして保管すべき)データはエンティティクラスのインスタンスとして扱われます。つまりCakePHPにおいては、データベースに保存したり取り出したりしたデータは、全て「
エンティティのインスタンス」になっています。
「
テーブル」は、データベースに用意されているテーブルへのアクセスに必要な情報を提供するものとして用意されます。テーブルに用意されているフィールドのバリデーション(値のチェック)などの情報もそうですし、テーブルにエンティティを保存したりする際にもテーブル内にあるメソッドを利用します。
つまり、「データベースのデータをPHPのオブジェクトとして扱うようにしたもの」が
エンティティで、「テーブルとの間でやり取りするための仕組みを提供するもの」が
テーブル、とイメージすると良いでしょう。
「使い分けが難しい……」と感じるかもしれませんが、実をいえば、どちらも最初のうちはコーディングしません。自動生成されたコードをそのまま利用するので、とりあえずは「エンティティもテーブルも知らなくても、モデルを使える」のです。
■データベース設定を確認!
モデルを利用する前に、CakePHPのプロジェクトからデータベースが利用できるようになっていることを確認しておきましょう。ここでは、「
samplecake」というプロジェクトを利用してきました。このプロジェクトでは、「
config」フォルダの「
app.php」にて、下のリスト欄のようにデータベースの設定をしてありました。
SQLiteを使い、
c:\data\db\samplecake_dbというデータベースファイルを利用するようにしてあります。これをそのまま利用してもいいですし、他のデータベースを使っている場合はそれに合わせて
'Datasources'の
'default'を設定しておいて下さい。
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Sqlite',
'persistent' => false,
'username' => 'sa',
'password' => '',
'database' => 'c:\data\db\samplecake_db',
'encoding' => 'utf8',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
],