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 別テーブル参照

 - 未分類 ,