CakePHPでController名と別のテーブルを使用する方法
CakePHP 3のコントローラーではコントローラー名と同じテーブルを$this->テーブル名
と指定することで、データベースを操作できます。
コントローラー名と違うデータベースを使用したい場合は、TableRegistry::get
を使用します。
下記サンプルでは、WebApiController
で、itemsテーブルを参照しています。
<?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->Items
PHPでは未定義のプロパティに値をセットするとエラーにはならず、そのプロパティが使用可能になります。関数内だけで使用する場合
同じようにTableRegistry::get
を使用してローカル変数に格納します。
$items = TableRegistry::get('items');