Как реализовать маркетплейс на laravel

Нужно сделать подобие маркетплейса на laravel с мини сайтами для каждого магазина

Как я это вижу

2-ве платформы на laravel

1- Основной сайт, где происходит выгрузка все информации c мини сайтов
2- Платформа для мини сайтов

Для каждого мини сайта использовать свою БД, вернее свой префикс в БД (У каждого сайта есть свои категории, динамические страницы, товары, настройки, грубо говоря 4-ре таблицы(пока) в БД для каждого мини сайта) и свой .env фаил

Получается, нужно реализовать подключение к разным БД у одного проекта

Как это сейчас работает:

В файле /bootstrap/app.php

Добавил код

if (isset($_SERVER['HTTP_HOST'])) {
    $host = idn_to_utf8($_SERVER['HTTP_HOST'], 0, INTL_IDNA_VARIANT_UTS46);
    $envFile = sprintf('site/%s', $host);
    if ($host && file_exists(sprintf('%s/%s', $app['path.base'], $envFile))) {
        $app->loadEnvironmentFrom($envFile);
    }
}

При заходе на любой домен(привязанный к данному проекту/серверу) ищем в папке site фаил с названием домена(в нем хранятся настройки для подключения к БД) и если есть, загружаем его вместо дефолтного .env файла

Затем в роутах проверяем, подключились к БД или нет

В routes/web.php

try {
    DB::connection()->getPdo();
    if(DB::connection()->getDatabaseName()){
    }
} catch (\Exception $e) {
    abort(404);
}

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

$domain = $_SERVER['HTTP_HOST'] ?? '';
$site = Cache::remember('setting_domain_'.$domain, 1440, function () {
    $site = \App\Setting::get()->keyBy('name')->toArray();
    return $site;
});

Заносим полученные данные в функцию config

config(['siteName' => $site['site_name']['value']]);

В шаблоне получаем

{{Config::get('siteName')}}

Все это работает и вроде как при 10 сайтах полет нормальный

Как данное решение будет вести себя при 1000+ сайтов?

Может кто-нибудь сталкивался с подобной задачей и знает как ее правильно реализовать(с меньшей нагрузкой)


Ответы (0 шт):