Может ли модель CakePHP изменить свою таблицу без повторного создания экземпляра?

Я работаю с неизменной исторической схемой базы данных, где каждый экземпляр объекта имеет свою собственную таблицу в базе данных с соответствующими записями. Мне нужно изменить модель useTable каждый раз, когда модель useTable , но сохранить хорошее кэширование Cake, а что нет.

Скажем, у меня много объектов пэдов, каждая из которых имеет несколько объектов примечаний (примечание принадлежит To Pad, Pad hasMany Note). Каждый пэд имеет запись в таблице пэдов, однако каждая заметка имеет свою собственную таблицу в базе данных (например, «pad_ {id}»). Эта схема исправлена, и я должен ее использовать.

Прямо сейчас мне не нужно делать никаких сбережений, поэтому я делаю это в модели до поиска, чтобы поддерживать чтение:

 function beforeFind($query_data) { if(empty($query_data['pad_id'])) { return false; } else { $this->useTable = $query_data['pad_id']; parent::__construct(); return $query_data; } } 

Это изменяет таблицу модели, используемую в базе данных, и отлично работает, когда Core::debug > 0 . Однако, когда он равен нулю, я думаю, что CakePHP кэширует код модели и неправильно изменяет таблицу. В любом случае, я получаю ошибку 404, когда я посещаю / pads / view / {pad_id} или любое действие динамически изменяет эту таблицу. Я не могу понять, что такое точная ошибка, потому что она отлично работает, когда я включаю отладку. Поэтому любые указатели на отладку этой проблемы также помогут.

Благодаря!

Вы должны иметь возможность использовать setSource() для изменения таблицы, используемой моделью. $this->setSource('pad_x') установит таблицу в «pad_x» и сбросит схему модели. Ссылка на API

Попробуйте var $persistModel = false; в вашем контроллере или в AppController.

См .: http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-speed-up-cakephp-apps/