связи между двумя разными базами

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

связи между двумя разными базами

Сообщение an.viktory@gmail.com »

есть две базы и между ними есть связи некоторых таблиц по некоторым полям вообщем проблема в том что Yii почему то не правильно прописывает названия таблиц

Код: Выделить всё

public function getBrand() {
        return $this->hasOne(Brands::className(), ['id' => 'id_brand'])
           ->viaTable(BrandToManufacturer::tableName(), ['id_manufacturer' => 'manufacturer_id']);
    }
    
     public static function getDb()()
    {
        return 'db2';
    }
    
где

Код: Выделить всё

Brands
 public static function getDb()()
    {
        return db1';
    }
а

Код: Выделить всё

BrandToManufacturer
 public static function getDb()()
    {
        return 'db1';
    }
    
    Или это теоретически не возможно ?
Последний раз редактировалось an.viktory@gmail.com 2018.08.15, 11:35, всего редактировалось 3 раза.
Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

Re: связи между двумя разными базами

Сообщение tugrik »

an.viktory@gmail.com писал(а): 2018.08.15, 09:25 вообщем проблема в том что Yii почему то не правильно прописывает названия таблиц
Выложите сам запрос с логера, и то как вы его формируете
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: связи между двумя разными базами

Сообщение an.viktory@gmail.com »

Код: Выделить всё

Exception (Database Exception) 'yii\db\Exception' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db1.brand_to_manufacturer' doesn't exist
а он должен искать запись в db2
как построена связь писал выше а пытаюсь вывести echo $manufacturer->brand->name;
Последний раз редактировалось an.viktory@gmail.com 2018.08.15, 11:35, всего редактировалось 1 раз.
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Re: связи между двумя разными базами

Сообщение Diplodok »

Так где правильно: bd1 или db1 ?
И разве не должно быть так?

Код: Выделить всё

    public static function getDb() {
        return Yii::$app->get('db1');
    }
получение настроек бд из конфига
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: связи между двумя разными базами

Сообщение an.viktory@gmail.com »

так и есть просто я тут не так написал)) просто хотел показать к чему какая таблица привязана
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Re: связи между двумя разными базами

Сообщение Diplodok »

Ну всё верно. viaTable не подставляет имя бд, а просто параметр названия таблицы вставляет из метода tableName(). Ну а запрос формируется в соответствии с настройкой указаной бд в текущей модели.
Самый простой вариант:

Код: Выделить всё

public function getBrand() {
        return $this->hasOne(Brands::className(), ['id' => 'id_brand'])
           ->viaTable('db2.brand_to_manufacturer', ['id_manufacturer' => 'manufacturer_id']);
    }
Ответить