Вызов неопределенного метода «Подключиться» - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю в мультитенантной системе, ранее я пробовал пакет https://github.com/hyn/multi-, но в конце концов я решил сделать это с помощью моего собственного метода.После большого количества исследований и тестирования разных вещей мне удалось создать этот код, но когда я выполняю его, он говорит мне, что метод подключения не определен, здесь я оставляю то, что я сделал, скорее всего, это связано с какой-то ерундой, которую яупустил из виду, но если кто-то может помочь мне решить эту проблему, я был бы очень признателен

помощники:

use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

if(! function_exists('conexionBD')){
 /**
     * Establish a tenant database connection.
     *
     * @param $hostname
     * @param $username
     * @param $password
     * @param $database
     */

    function conexionBD($hostname, $username, $password, $database){
        DB::purge('empresa');

        Config::set('database.connections.empresa.host', $hostname);
        Config::set('database.connections.empresa.database', $database);
        Config::set('database.connections.empresa.username', $username);
        Config::set('database.connections.empresa.password', $password);

        DB::reconnect('empresa');

        Schema::connection('empresa')->getConnection()->reconnect();
    }
}

Empresa Модель:

class empresa extends Model
{
    protected $fillable = [
        'hostname',
        'username',
        'password',
        'database'
    ];

    public function ciudad() {
        return $this->belongsTo('confia\ciudad');
    }

    public function empresaUsuario() {
        return $this->hasMany('confia\empresasUsuario');
    }

    public function connect()
    {
        if (! $this->connected()) {
            conexionBD(
                $this->hostname,
                $this->username,
                $this->password,
                $this->database
            );
        }
    }
    /**
     * Check if the current tenant connection settings matches the company's database settings.
     *
     * @return bool
     */
    private function connected()
    {
        $connection = Config::get('database.connections.empresa');
        return $connection['username'] == $this->username &&
            $connection['password'] == $this->password &&
            $connection['database'] == $this->database;
    }
}

Middleware Арендатор:

use Closure;
use confia\empresa;

class Tenant{

    protected $company;

    /**
     * Tenant Conctructor
     * @param empresa $empresa
     */

    public function __construct(empresa $empresa)
    {
        $this->empresa = $empresa;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */

    public function handle($request, Closure $next) {
        if (($request->session()->get('empresaId')) === null)
            return redirect()->route('inicio')->withErrors(['error' => __('Por favor inicie sesión en alguna empresa antes de intentar esta acción')]);

        // Get the company object with the id stored in session
        $empresa= $this->empresa->find($request->session()->get('empresaId'));

        // Connect and place the $company object in the view
        $this->connect($empresa);

        return $next($request);
    }
}

В моей переменной сеанса empresaId я сохранил идентификатор своей компании concat в виде статической строки, это то, что дает мне имя базы данных, связанной с этой компанией.

Когда я запускаюсистема, во время изменения арендатора, чтобы начать работать с другой базой данных, я получаю следующую ошибку,

«Вызов приложения неопределенного метода \ Http \ Middleware \ Tenant :: connect ()»

Кто-то знает, что мой код отсутствует или я делаю что-то не так, чтобы заставить мультитенантную систему работать правильно?

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