Я хочу создать приложение с одной «центральной» базой данных и несколькими базами данных «клиентов» (1 клиент имеет 1 БД).Я хочу использовать рамки Lumen Rest Api.Позвольте мне объяснить логику баз данных и мою проблему.
Центральная БД (упрощенно):
Таблица: арендаторы
Столбцы: id (PK)), id_tenant (FK), db_host, db_username, db_password, db_port, db_name
Клиентская база данных (упрощенно):
Таблица: проблемы
Столбцы: id (PK), id_creator, имя_вопроса, write_time
Lumen part
У меня есть две модели: Арендаторы
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Laravel\Lumen\Auth\Authorizable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
class Tenants extends Model implements AuthenticatableContract, AuthorizableContract
{
use Authenticatable, Authorizable;
protected $connection = 'mysql2';
protected $fillable = [
'id_tenant'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
}
Проблемы:
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Laravel\Lumen\Auth\Authorizable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
class Issues extends Model implements AuthenticatableContract, AuthorizableContract
{
use Authenticatable, Authorizable;
protected $connection = 'tenant';
protected $fillable = [
'id_issue'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
}
Кроме того, я создал файл в config / database.php:
<?php
return [
'default' => 'mysql',
'connections' => [
'mysql2' => [
'driver' => 'mysql',
'host' => 'dbhost',
'database' => 'dbName',
'username' => 'dbUser',
'password' => 'secretPass',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'tenant' => [
'driver' => 'mysql',
'host' => '',
'port' => '',
'database' => '',
'username' => '',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
]
],
]
?>
Я написал 2 контроллера (TenantsController и IssuesController), которые работают без проблем, когда я жестко кодирую информацию о базе данных арендатора в config / database.php.
Моя проблема:
Когда я вызываю route: api/tenant/1
(использует => TenantsController @ getTenantById) Lumen возвращает правильный JSON с данными БД запрошенного арендатора с идентификатором1. Эти данные мне нужны для заполнения переменных соединения с другой (клиентской) базой данных, где находятся проблемы с таблицами.Как можно установить соединение с клиентом базы данных для вызова маршрута api/issues
из второй БД и получить список всех проблем ??
Примечание. Давайте абстрагируемся от аутентификации пользователя и безопасного API.
Заранее спасибо за помощь.