Может ли модель CakePHP изменить свою таблицу без повторного создания? - PullRequest
2 голосов
/ 01 октября 2009

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

Скажем, у меня есть много объектов пэдов, у каждого из которых есть несколько объектов заметок (Note принадлежит 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} или любых других действий, которые динамически изменяют эту таблицу. Я не могу понять, какая именно ошибка, потому что она прекрасно работает, когда я включаю отладку. Так что любые указания по устранению этой проблемы также могут помочь.

Спасибо!

Ответы [ 2 ]

9 голосов
/ 08 октября 2009

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

1 голос
/ 02 октября 2009

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

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

...