CakePHP containで関連するテーブルを取得

containとは

containとはテーブルを検索する際にそのテーブルに関連するテーブルを取得することのできる機能です。

$query = $this->User->find('all')->contain('Company');
$this->set('users', $query);

とすれば

<?= $user->name ?>//hal-bo
<?= $user->company->name ?>//town
<?= $user->company->department_number ?>//4

上のように ユーザーの所属している会社の情報を取り出すことができるようになります

containを使って検索する

containを使うことで関連テーブルを使った検索ができるようになります。

$query = $this->User->find('all')->contain('Company')->where(['Company.name' => 'town']);
$this->set('users', $query);

このようにすることでより効果的な検索ができるようになります。カラム名が2つのテーブルでかぶっていなければカラム名(例:’department_number’)のみで指定可能です。