Я использую библиотеку 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
запросами (по крайней мере, сейчас, не пробовал все возможные типы запросов из курса)