首页 > 解决方案 > Laravel Hyn 多租户路由搜索所有数据库以获取价值

问题描述

试图弄清楚这是否可能,但我正在开发一个 SaaS 通信项目,该项目允许客户向联系人发送短信。如果他们愿意,这些联系人可以回复以提供双向通信。

问题是在电话 api 中设置了一个特定的回调 url,需要正确路由传入的文本请求。每个客户都有自己的号码或号码,因此我希望能够在路由中接收传入请求,在所有租户数据库中搜索电话设置表,如果找到,则通过保存短信正确继续请求,看看在创建的任何自动回复设置中,将文本转发到另一个号码等。所有这些都是每个租户特定的。

是否可以在路由/控制器中搜索所有租户数据库,然后将响应正确转发到该租户的数据库?

如果不是,或者如果它更干净,是否可以改为连接到主/核心租户并搜索电话号码和主机名的主表,然后将请求重定向到正确的租户?如果是这样,我需要能够连接主数据库,以便在每个客户端进行更改时存储和更新他们的电话号码。

标签: laravelroutesmulti-tenant

解决方案


我能够通过在主机名表中添加电话号码、在那里搜索匹配项并重置与该租户的当前连接来解决它。

$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

推荐阅读