文系Webエンジニアの技術メモとたまに旅のメモ

未経験文系エンジニアとして働いてます。アウトプットとして簡単に技術メモを残していきます。たまに旅関係のも趣味で残していこうと思ってます。

【CakePHP3/初心者向け】ControllerからTableに追加した関数を呼ぶ方法

今回は、CakePHP3系でControllerからTableに記述した関数を呼ぶ方法を記していきます。
※同名のControllerとTableでの場合なので、異なる場合はまた別の記述をする必要があります。

1.今回やりたい事

UsersContoller.phpからUsersTable.phpに記述した関数を呼びたい。

2.Tableに関数の記述

UsersTable.phpに任意の関数を追加します。
今回は、Users詳細画面にで使用する様な特定のIDのレコードを取得する関数を記述します。

UsersTable.php
<?php
    public function getOneUser($user_id)
    {
        $user = $this->find()
            ->where(['id' => $user_id])      
            ->first();
        return $user;
    }
?>

3.Controllerの記述

UsersController.phpでUsersTable.phpで追加した「getOneUser」関数を呼び出します。
任意のfunction内で下記記述をします。
今回はこの様な書き方になります。

UsersController.php
<?php
    $id = 1;  // ここの値はIDを取得する様な処理を記述する想定です。
    $users = $this->Users->getOneUser($id);

    $this->{Table名}->{Tableに記述した関数名}
?>

4.取得内容の確認

実際に関数が呼ばれ想定の値が取得できているか確認をしましょう。

UsersController.phpで$usersをdebugして見ましょう。

UsersController.php
<?php
    $id = 1;  // ここの値はIDを取得する様な処理を記述する想定です。
    $users = $this->Users->getOneUser($id);
    // 下記2行を追加
    debug($users);
    die();
?>

上記記述がされているURLにアクセスします。
この様に、指定したIDのレコードが取得できて入れば成功です。

f:id:igarashi44:20200704193625p:plain

5.良くない書き方

Controllerのみで、DBからレコードを取得する事は可能ですが、
MVCモデルの書き方としては、正しくないため、切り分けを行いましょう。

Controller:ビジネスロジック(一連の流れ)を記述
Table:DBに関する処理の記述

下記コードは同じ結果が取れますが、①の様に書いていきましょう。

UsersController.php
<?php
    // ①:Tableに記述した関数を呼び出してユーザー1件取得
    $user = $this->Users->getOneUser($id);
    // ②:上記と結果は一緒だが、DBからデータを取得する処理は、Table.phpに書いてやるべき事を分けるべき
    $usrs = $this->Users->find()
        ->where(['id' => $id])
        ->first();
?>


今回はControllerからTableに追加した関数を呼ぶ方法について書きました。
初めての方は、どこにどの様に書くべきかが慣れるまで大変なので、簡単な記述から行なって
慣れてきたら別テーブルの処理や結合した内容を呼べる様になっていきましょう。