Как использовать spatie / laravel-мультитенантность с одной базой данных?

#laravel #multi-tenant

Вопрос:

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

https://github.com/spatie/laravel-multitenancy

Я прочитал документацию по единой базе данных здесь: https://spatie.be/docs/laravel-multitenancy/v2/installation/using-a-single-database

Но что дальше ??

Допустим, прямо сейчас пользователи хранятся в таблицах пользователей, и с помощью этого пакета я хочу хранить пользователей, зависящих от клиента.

Я нигде не нашел реального примера. так что лучше, если кто-нибудь уже внедрил мультитенант Spatie, используя единую базу данных, пожалуйста, помогите мне здесь.

Заранее спасибо.

Ответ №1:

Хотя spatie/laravel-многопользовательская поддержка отдельных баз данных, она не поставляется с областями запросов (и, похоже, их добавлять не планируется, как вы можете видеть здесь: https://github.com/spatie/laravel-multitenancy/issues/124), поэтому вам нужно будет создать их вручную.

Итак, вам нужно:

  • добавьте идентификатор tenant_id в таблицы для конкретных клиентов
  • добавьте наблюдателя, чтобы сохранить идентификатор tenant_id при создании нового регистра в таблице
  • добавьте глобальную область запроса, чтобы всегда фильтровать данные с использованием текущего идентификатора клиента

Вы можете увидеть нечто подобное в этом видео: https://www.youtube.com/watch?v=nCiNqboYFVQ

Разница в том, что вы будете использовать текущего арендатора, возвращенного spatie/laravel-multitenancy, вместо зарегистрированного идентификатора пользователя для получения данных арендатора.

Если вам нужен пакет, который уже содержит готовые к использованию области запросов, вы можете попробовать аренду для Laravel: https://tenancyforlaravel.com/docs/v3/single-database-tenancy

Или, если ваше приложение имеет очень простую стратегию многопользовательской аренды (например, арендатором является зарегистрированный пользователь или его команда), вы можете просто создать некоторые области запросов без необходимости использования пакетов, точно так, как показано в видео выше, так как гораздо проще идентифицировать арендатора по идентификатору пользователя или идентификатору команды, даже в командах терминала и заданиях очереди (но, похоже, это не ваш случай, так как вам нужно, чтобы пользователи принадлежали арендатору).

Я надеюсь, что это поможет вам выбрать правильный пакет и стратегию для вашего проекта.

Комментарии:

1. Хии, спасибо, что сообщили мне об этом пакете, я тоже пробовал, но, похоже, в нем тоже отсутствует документация. Я создал таблицу арендаторов и добавил соответствующую характеристику в таблицу пользователей. Теперь при инициализации аренды я сталкиваюсь с ошибками. Если кто-нибудь может поделиться примером одной БД с данным пакетом, это было бы лучше. Спасибо