CakePHPでコントローラーから他のテーブルの情報を使う方法

456 回閲覧されました
みなさんこんにちは、jonioです。
例えばdemoテーブルとusersテーブルがあったとします。
DemoコントローラーからUsersテーブルを呼び出す方法が分からなくて時間がかかったので次に同じことをした時の為にこの記事を残します。
CakePHPのバージョン
3.1.0と4.5.3で試しました。
3.6.〜からコードの追記をしないといけなくなったのでそれについても説明します。
loadModelを使う
DemoController.phpに記述します。
アクションは何でもいいですがindexアクションを使います。
class DemoController extends AppController
{
public $Users = null;
/**
* Index method
*
* @return \Cake\Http\Response|null|void Renders view
*/
public function index()
{
$this->loadModel('Users');
$users = $this->Users->find();
$this->set(compact('users'));
}
3行目はCakePHPのバージョンが3.6.〜以降の場合には記述しないとブラウザに下記の警告が表示されます。

12行目でusersテーブルが使えるようになります、記述方法は下記になります。
$this->loadModel('モデル名s');
今回はusersテーブルにアクセスしたいのでモデル名は「Users」です。
14行目でusersテーブルの情報を取得しています。
usersテーブルの情報を表示
そしてusersテーブルに紐づくindex.php(CakePHPの3系の場合はindex.ctp)に下記の記述をします。
<?php foreach($users as $user): ?>
<?= $user->name ?>
<?php endforeach ?>
これでusersテーブルのnameカラムの値が表示できます。