Laravel Многопользовательский маршрут Hyn Поиск значения во всех базах данных - PullRequest
0 голосов
/ 14 июля 2020

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

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

Можно ли выполнить поиск по всем базам данных клиентов в маршруте / контроллере, а затем правильно пересылать ответ в базу данных этого клиента?

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

1 Ответ

0 голосов
/ 29 июля 2020

Мне удалось решить эту проблему, добавив номер телефона в таблицу имен хостов, выполнив поиск совпадения и сбросив текущее соединение с этим клиентом.

$hostname = DB::table('hostnames')->select('*')->where('phone_number', $request->To)->first();
if($hostname->fqdn != 'defaultdomain.com'){
  $dbname = DB::table('websites')->select('uuid')->where('id', $hostname->website_id)->first();

  Config::set("database.connections.tenant", [
    "driver"   => 'mysql',
    "host" => 'localhost',
    "database" => $dbname->uuid,
    "username" => env('DB_USERNAME'),
    "password" => env('DB_PASSWORD')
  ]);

  Config::set('database.default', 'tenant');
  DB::purge('tenant');
  DB::reconnect('tenant');
}
//Continue with contact info and storing phone logs
...