Страница 1 из 1

Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 16:55
dsn
Привет народ кто подскажет как можно объединить запрос с двух разных БД в один перед скармливанием его ActiveDataProvider.
Суть такова есть 2 одинаковые модели 2 разных БД? надо объединить данные с двух разных БД

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

class HomeStoreAddresses extends BaseActiveRecord
{
    public static function getDb()
    {
        return Yii::$app->home_db;
    }
}

class ClimaStoreAddresses extends BaseActiveRecord
{
    public static function getDb()
    {
        return Yii::$app->clima_db;
    }
}
Про такой вариант знаю - но работает не так как надо - запрос идет к одной БД

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

	$query1 = HomeStoreAddresses::find()->where([
            'type'      => $type,
            'region_id' => $this->region_id,
        ]);

        $query2 = ClimaStoreAddresses::find()->where([
            'type'      => $type,
            'region_id' => $this->region_id,
        ]);

        $query1->union($query2);
        
        $dataProvider = new ActiveDataProvider([
            'query' => $query1,
            'pagination' => [
                'pageSize' => 10,
            ],
        ]);
Такой вариант не красив и неправилен

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

       $query1 = HomeStoreAddresses::find()->where([
            'type'      => $type,
            'region_id' => $this->region_id,
        ])->all();

        $query2 = ClimaStoreAddresses::find()->where([
            'type'      => $type,
            'region_id' => $this->region_id,
        ])->all();

        $result  = array_merge($query1, $query2);

        $dataProvider = new ArrayDataProvider([
            'key'       =>'id',
            'allModels' => $result,
            'pagination' => [
                'pageSize' => 10,
            ],
        ]);

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 17:07
rak
сделать mysql view и к нему модель

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 17:14
dsn
rak писал(а): 2017.03.13, 17:07 сделать mysql view и к нему модель
не совсем понятно, можно пример в студию

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 17:21
Onotole
rak писал(а): 2017.03.13, 17:07 сделать mysql view и к нему модель
Разные же базы

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 17:43
rak
Onotole писал(а): 2017.03.13, 17:21
rak писал(а): 2017.03.13, 17:07 сделать mysql view и к нему модель
Разные же базы

да по идее на одном сервере можно, хотя и union вроде как должен работать

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 18:08
dsn
вроде как - но выбирает из одной бд если так написать $query1->union($query2); будет дергаться бд $query1 если наоброт $query2->union($query1); - $query2

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 18:13
rak
а запрос какой генерируется?

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 18:26
dsn
rak писал(а): 2017.03.13, 18:13 а запрос какой генерируется?
Открывает соединение с текущей БД
выборка данных -----
далее

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

    (SELECT * FROM `fp_store_addresses`) UNION ( SELECT * FROM `fp_store_addresses` )
Opening DB connection: mysql:host=localhost;port=3306;dbname=forteprom-new
и все соединение идет только с одной из 2 БД
если наоборот соединить будет выборка но только с др БД

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

$query2->union($query1);

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

    (SELECT * FROM `fp_store_addresses`) UNION ( SELECT * FROM `fp_store_addresses` )
Opening DB connection: mysql:host=localhost;port=3306;dbname=forteprom-clima

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 18:42
rak
это из лога?
ну логично ж, что не работает, имена баз не устанавливаются, а вот почему - это вопрос

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 18:51
rak
можно попробовать вручную добавить имя бд(через alias или через tableName)

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 19:15
rugabarbo
rak писал(а): 2017.03.13, 18:42 это из лога?
ну логично ж, что не работает, имена баз не устанавливаются, а вот почему - это вопрос
Думаю, что не реализована в Yii подстановка имён баз в таких кейсах...

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 19:19
Onotole
rak писал(а): 2017.03.13, 17:43
Onotole писал(а): 2017.03.13, 17:21
rak писал(а): 2017.03.13, 17:07 сделать mysql view и к нему модель
Разные же базы

да по идее на одном сервере можно, хотя и union вроде как должен работать
Если на одном сервере и под одним пользователем то да

Re: Обьединение результата запроса с 2 БД

Добавлено: 2017.03.13, 19:20
Onotole
rugabarbo писал(а): 2017.03.13, 19:15
rak писал(а): 2017.03.13, 18:42 это из лога?
ну логично ж, что не работает, имена баз не устанавливаются, а вот почему - это вопрос
Думаю, что не реализована в Yii подстановка имён баз в таких кейсах...
Если на одном сервере и под одним пользователем, то в tableName указать явно базу А если на разных, то вариант мерджить результаты уже