Я настроил два подключения к базе данных:
'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 префикс не введен?
Есть идеи, как правильно построить этот запрос?