Laravel laravel кросс-базы данных, где происходит ошибка - PullRequest
0 голосов
/ 17 марта 2020

Я настроил два подключения к базе данных:

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', '####'),
            'port' => env('DB_PORT', '####'),
            'database' => env('DB_DATABASE', '####'),
            'username' => env('DB_USERNAME', '####'),
            'password' => env('DB_PASSWORD', '####'),
            'charset' => 'utf8',
            'prefix' => 'pref1_',
            'prefix_indexes' => true,
        ],

        'sqlsrv1' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST1', '####'),
            'port' => env('DB_PORT1', '####'),
            'database' => env('DB_DATABASE1', '####'),
            'username' => env('DB_USERNAME1', '####'),
            'password' => env('DB_PASSWORD1', '####'),
            'charset' => 'utf8',
            'prefix' => '',
        ],

Для обычной пользовательской модели и 2 пользовательских моделей:

Синергия:

    class Synergy extends Model
    {
        protected $connection = 'sqlsrv1';
        protected $table = 'humres';
        protected $primaryKey = 'res_id';
        public $timestamps = false;

    public function user(){
        return $this->belongsTo('App\User', 'employee_id', 'res_id');
    }

PushNotification:

    class PushNotification extends Model
    {

    public function user(){
        return $this->belongsTo('App\User');
    }

Я хочу проверить, есть ли у пользователя разрешение на уведомление pu sh и установлен ли для другого столбца значение true. Я пробую это с этим запросом:

       $users = User::with('PushNotification')->with('Synergy')
            ->whereHas('PushNotification', function($q){
                $q->where('type', 'news')->where('active', 1);
            })
            ->whereHas('Synergy', function($q1){
                $q1->where('freefield20', 1);
            })
            ->get();
        return $users;

Выдает следующую ошибку:

SQLSTATE[42S02]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'pref1_humres'. (SQL: select * from [pref1_users] where exists (select * from [pref1_push_notifications] where [pref1_users].[id] = [pref1_push_notifications].[user_id] and [type] = news and [active] = 1) and (exists (select * from [pref1_humres] where [pref1_users].[employee_id] = [pref1_humres].[res_id] and [freefield20] = 1)))

Почему он использует префикс sqlsrv при sqlsrv1 префикс не введен?

Есть идеи, как правильно построить этот запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...