Я создаю сайт в 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
Спасибо, но я уже попробовал это, и это не работает. Cache: clear (false, 'Page'); // Модель - это Page.php, правильно? (Страница extends Model ...) – Aaron
Нет, используйте именно то, что я набрал, и он очистит кеш каждой модели (Cake 2.x). – jeremyharris
Странно ... он не работает, я пытаюсь использовать код в функции представления и функции beforefilter(). Да Торт 2.1. и я использовал App :: import ('Cache'); для импорта класса ... – Aaron