Я создаю приложение для многих арендаторов, и у каждого арендатора есть своя база данных. Имя базы данных совпадает с идентификатором арендатора (идентификатор существует из пяти номеров). После аутентификации пользователь должен быть подключен к своей собственной базе данных и перенаправлен на свою панель.Orchestral/tenanti multi database
Я пытался связать пользователя с его базой данных с помощью следующего кода, который я поместил в Authenticate.php
if (!Auth::guest() && Auth::user()->tenant) {
$user = Auth::id();
Tenanti::driver('user')->asDefaultDatabase($user, 'users_{id}');
Config::set('database.connections.mysql.database', 'user_'.$user);
}
если заявление проверяет в основной базе данных, если зарегистрированный пользователь является арендатором (булево).
Конфигурационный/database.php содержит следующий код:
'tenants' => [
'user_1' => [
'driver' => 'mysql',
'host' => 'localhost', // for user with id=1
'database' => '86097', // for user with id=1
'username' => 'root', // for user with id=1
'password' => 'root', // for user with id=1
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
AppServiceProvider:
<?php namespace App\Providers;
use Orchestra\Support\Facades\Tenanti;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Tenanti::setupMultiDatabase('tenants', function (User $entity, array $template) {
$template['database'] = "user_{$entity->getKey()}";
return $template;
});
}
}
?>
Я не получаю сообщение об ошибке, но соединение не изменилось. База данных пользователя пуста, поэтому я не вижу никаких данных при входе в систему с user_id = 1. Заранее благодарим за помощь.
Я изменил вышеуказанные вещи, но данные все еще появляются, однако база данных арендаторов полностью пуста. Кроме того, как я могу добавить второго и третьего пользователей, когда конфигурация существует только для пользователя с id = 1? – Novy
Прочтите https://github.com/orchestral/tenanti#setup-model-observer Чтобы быть честным, лучше понять концепцию построения многопользователя в одной базе данных, прежде чем пропустить множество вещей и предположить, что установка одним щелчком будет решать все. Некоторые пример кода: https://github.com/crynobone/todoist/compare/master...single-database https://github.com/crynobone/todoist/compare/single-database .. .multi-database p/s: он неполный, так как я никогда не проектировал его для решения всего. – crynobone
Мне удалось реализовать базу данных с несколькими арендаторами. Спасибо за полезный пример. Требуется ли модификация приложения для внесения изменений в систему с несколькими базами данных? Каждый пользователь имеет по крайней мере четыре большие таблицы (более одного миллиона строк каждая). Поэтому я считаю, что лучшим решением является наличие системы с несколькими базами данных. Поправьте меня, если я ошибаюсь. – Novy