2012-05-31 2 views
0

Я создаю сайт в CakePHP с переменными базами данных. Я сделал это с помощью следующего кода:Изменение настроек базы данных Cakephp на лету

CONTROLLER:

$db_host = $DB_SET['Project']['db_host']; //From other database 
$db_user = $DB_SET['Project']['db_user']; 
$db_pass = $DB_SET['Project']['db_pass']; 
$db_database = $DB_SET['Project']['db_database']; 

ConnectionManager::create("client_db", array(
    'datasource' => 'Database/Mysql', 
    'driver' => 'mysql', 
    'persistent' => false, 
    'host' => $db_host, 
    'login' => $db_user, 
    'password' => $db_pass, 
    'database' => $db_database, 
    'prefix' => '', 
    'encoding' => 'UTF8', 
    'port' => '', 
)); 
$DB_LINE = $this->Page->findPage('3'); 

МОДЕЛЬ:

class Page extends Model { 
    public $useDbConfig = 'client_db'; 
    function findPage($pagenr) { 
     $page = $this->find('first', array(
      'conditions' => array (
       'Page.id' => $pagenr) 
     )); 
    return $page; 
    } 
} 

Теперь мне также нужно изменить таблиц в базе данных на лету. Я делаю это с помощью (контроллер):

$tbl_current = array('tbl_cheques', 'tbl_wishes'); 
$this->Modelname->useTable = $tbl_current[$pageid]; //Getting the pageID from an url parameter. 

Все отлично работает, только если я не ждать некоторое время, прежде чем нажать на другую страницу, я получаю эту ошибку:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Page.fqlkdf' in 'field list' 

Это потому, что торт еще предыдущей таблице в его кеше. Если я подожду минуту, а затем меняю страницу, то все будет хорошо. Любые предложения по этой проблеме? Спасибо заранее,

Aarón

ответ

1

Как вы сказали, информация таблицы кэшируется. Так что вам просто нужно удалить этот кэш:

Cache::clear(false, '_cake_model_'); 

Или, вы можете просто временно отключить кэш

Configure::write('Cache.disable', false); 
+0

Спасибо, но я уже попробовал это, и это не работает. Cache: clear (false, 'Page'); // Модель - это Page.php, правильно? (Страница extends Model ...) – Aaron

+0

Нет, используйте именно то, что я набрал, и он очистит кеш каждой модели (Cake 2.x). – jeremyharris

+0

Странно ... он не работает, я пытаюсь использовать код в функции представления и функции beforefilter(). Да Торт 2.1. и я использовал App :: import ('Cache'); для импорта класса ... – Aaron

Смежные вопросы