Мульти-аренда в люмене - PullRequest
       19

Мульти-аренда в люмене

0 голосов
/ 14 марта 2019

Я хочу создать приложение с одной «центральной» базой данных и несколькими базами данных «клиентов» (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.

Заранее спасибо за помощь.

...