Как сообщить запросу `whereHas`, что таблица подзапроса находится внутри другой базы данных (многопользовательская) - PullRequest
0 голосов
/ 28 марта 2020

Я использую библиотеку Laravel tenancy - multi-tenant, чтобы сделать свое приложение мультитенантным, поскольку каждая организация должна иметь свою собственную базу данных. Это прекрасно работает, поскольку автоматически распознает арендатора, поэтому он искал пользователя в правильной базе данных.

Хотя, когда я, например, пытаюсь выполнить запрос whereHas, например:

  // hostname is a system db table
  $userQuery = User::query();  // This is a tenant db table
  $userQuery->whereHas('hostname', function ($q) {
    $q->where('id', 1);
  });
  $users = $userQuery->get();

красноречиво ищет таблицу hostnames в той же базе данных, что и таблица users.

ошибка

Illuminate/Database/QueryException with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table '721d9894276846dbb20d36ff83c46fb3.hostnames' doesn't exist (SQL: select * from `users` where exists (select * from `hostnames` where `users`.`hostname_id` = `hostnames`.`id` and `id` = 1 and `hostnames`.`deleted_at` is null))'

Следующее отношение работает нормально:

  Username::first()->hostname

Пользователь. php

<?php

namespace App;

use Hyn\Tenancy\Abstracts\TenantModel;

class User extends TenantModel
{
  public function hostname() { return $this->belongsTo('App\Hostname'); }
}

Имя хоста. php

<?php

namespace App;

use Hyn\Tenancy\Traits\UsesSystemConnection;

class Hostname extends \Hyn\Tenancy\Models\Hostname
{
  public function user() { return $this->hasMany('App\User', 'hostname_id'); }
}

Обратите внимание, что это отношение пользователя к имени хоста является лишь примером. Я испытываю ту же проблему для каждого запроса whereHas, который использует таблицы из 2 баз данных.

Как я могу "сообщить" запросу whereHas, что соответствующая таблица находится в другой базе данных? я только сталкиваюсь с этой проблемой с whereHas запросами (по крайней мере, сейчас, не пробовал все возможные типы запросов из курса)

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