Lomoson
@Lomoson

Как работать с несколькими базами в Yii?

Хочу сделать такую штуку: при регистрации для компании создается отдельная база данных. В этом есть плюсы и минусы, но сейчас не об этом.
У меня нет опыта работы с такой архитектурой. Подскажите, пожалуйста, как адекватно можно реализовать.
Погуглил, нашел yiiframework.ru/doc/cookbook/ru/model.multiple.dat... но это не дало мне полного представления как это можно сделать.
  • Вопрос задан
  • 2872 просмотра
Пригласить эксперта
Ответы на вопрос 4
MniD
@MniD
Хм, там же все подробно расписано, в конфигах прописываешь конфигурации баз, а в модели с помощью getDbConnection указываешь к какой базе принадлежит модель
class Model extends CActiveRecord {
    public function getDbConnection(){
        return Yii::app()->db2; // db2 - имя базы из конфига
    }
}

Уточни что конкретно тебе не понятно.
Ответ написан
fornit1917
@fornit1917
В Yii вся работа с базой идет через экземпляр класса CDbConnection. Вам нужно подсовывать коннекшн к нужно вам базе везде, где это вам необходимо. Как именно это сделать - зависит от специфики разрабатываемого вами приложения. Если у вас например гарантированно в рамках одного http-запроса можно определить, к какой компании относится текущий пользователь, и вы уверены, что в рамках этого http-запроса вам не понадобится никакой бд кроме бд его компании, то можете сделать "динамическую" конфигурацию компонента db в конфиге приложения.
Ответ написан
Комментировать
@Nc_Soft
все очень просто, в конфиге
'components'=>array(
'dbGlobal'=>array(
)
)
ее вызываете через Yii::app()->dbGlobal->..
когда работаете с компанией, то скорее всего доступы к бд хранятся в глобальной базе
нужно создать компонент db через сreateComponent с которым будете работать в пределах компании
Ответ написан
@krypt3r
Вот пример конфига из рабочего проекта, который работает с двумя БД:
'components'=>array(
     'oradb'=>array(
         'class' => 'ext.oci8Pdo.OciDbConnection',
         'connectionString' => 'oci:dbname=xxx.xxx.xxx.xxx:xxxx/dbo;charset=AMERICAN_AMERICA.cl8mswin1251',
         'username' => 'login',
         'password' => 'password',
         'enableProfiling' => TRUE,
         'enableParamLogging' => TRUE,
     ),

     'mydb'=>array(
         'class' => 'CDbConnection',
         'connectionString' => 'mysql:host=localhost;dbname=somedb',
         'username' => 'login',
         'password' => 'password',
         'charset' => 'UTF8',
     ),
…
);

Ну и в коде обращения к базам идут через Yii::app()->mydb или Yii::app()->oradb
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы