CakePHPでController名と別のテーブルを使用する方法

CakePHP 3のコントローラーではコントローラー名と同じテーブルを$this->テーブル名と指定することで、データベースを操作できます。
コントローラー名と違うデータベースを使用したい場合は、TableRegistry::getを使用します。

下記サンプルでは、WebApiControllerで、itemsテーブルを参照しています。

WebApiController.php
<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Event\Event;
use Cake\ORM\TableRegistry;
use Cake\Routing\Router;

class WebApiController extends AppController
{
    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);
        $this->Auth->allow(['list']);
    }

    public function initialize()
    {
        parent::initialize();
        $this->Items = TableRegistry::get('items');
    }

    public function list()
    {
        $this->viewBuilder()->setClassName('Json');
        $results = array();
        $selectItems = $this->Items->find('all');
        foreach ($selectItems as $item) {
            $results[] = [
                'id' => $item['id'],
                'date' => $item['created']
            ];
        }
        $this->set([
            'results' => $results,
            '_serialize' => ['results']
            ]);
        return;
    }
}
initialize()はコンストラクタの最後でコールされます。
$this->ItemsPHPでは未定義のプロパティに値をセットするとエラーにはならず、そのプロパティが使用可能になります。
実行結果
CakePHP 別テーブル参照

関数内だけで使用する場合

同じようにTableRegistry::getを使用してローカル変数に格納します。

$items = TableRegistry::get('items');
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

スポンサードリンク

関連コンテンツ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です