2015-08-10 4 views
0

Как я могу переключить базу данных для всего проекта, как этот пример:CakePHP подключения к базе данных переключателя для всего проекта

пользователь 1 использует TEST1 базы данных

Пользователь 2 использует базу данных test2

пользователя 3 использует база данных test3

Как это выше ... Те ID от пользователя, будут поступать из базы данных по умолчанию (страница Логина)

P S: Извините за мой плохой английский, мне нужна дополнительная информация, пожалуйста, скажите мне.

+0

Зачем им нужна собственная база данных? Похоже, вам нужно реструктурировать свои данные. – IWillScoop

+0

Потому что они разные клиенты ... –

ответ

0

Создать несколько конфигураций баз данных в database.php

Пусть у нас есть конфигурации по умолчанию, test1, test2, TEST3.

Как вы сказали, пользовательские данные находятся в конфигурации по умолчанию db, и я считаю, что вы используете AUTH COMPONENT для авторизации.

Теперь добавьте следующую функцию в AppController

 

    public function beforeFilter() { 
     //call change db config function on user login and pass which config need to use 
     if($this->Auth->loggedIn()) { 
      //user login 
      ///Some logic to select db config according login user. 
      $dbConfig = "result of logic which return db config name"; 
      $this->_userSpecificDbConfig($dbConfig); 
      } 
    } 

    private function _userSpecificDbConfig($dbConfig) { 
     //get model name 
     $model = $this->name; 
     //set db configuration for user 
     switch($dbConfig) { 
      case 'test1': 
       $this->{$model}->useDbConfig = "test1"; 
       break; 
      case 'test2': 
       $this->{$model}->useDbConfig = "test2"; 
       break; 
      case 'test3': 
       $this->{$model}->useDbConfig = "test3"; 
       break; 
      default: 
       $this->{$model}->useDbConfig = "default"; 
     } 
    } 

Попробуйте этот код.

+0

Сегодня я пробую это! Но таким образом изменится база данных для всего проекта? Я спрашиваю, потому что модель $ в вашем коде ... для авторизации я читаю сеанс, например: 'if (! $ This-> Session-> check ('Questionarios.nm_usu')) { $ this-> Session-> setFlash ('VocêÃÃÃà ¢ à ¢ ¬ ¬ ¬ ¬ log log log log log log log log.;;;;;;;;;;;;;;;;;;;; $ this-> redirect (array ('controller' => 'usuarios', 'action' => 'login')); } ' –

+0

Не получите вас? –

+0

Он изменяется только для этой модели ... Как я могу установить базу данных для всего приложения? Я попробовал $ this-> MyModel-> setDataSource ('teste'); Но это меняется именно к этой модели ... –