首页 > 解决方案 > 如何在 Laravel 中使用多租户配置验证?

问题描述

我制作了一个多租户的 Laravel 应用程序,它大部分都可以工作。

我遇到的最后一个配置问题是关于验证。

如果我按照文档中的指示执行以下操作:

$validatedData = $request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
]);

我会收到以下错误:

“SQLSTATE [42S02]:未找到基表或视图:1146 表 'master.posts' 不存在

这是真的,因为“master”指的是主数据库而不是租户数据库。

如何在租户数据库上配置验证?

下面是我的多租户中间件:

public function handle($request, Closure $next)
{
    $tenant_db = Auth::user()->tenant_db;
    Config::set('database.connections.tenant_mysql.database', $tenant_db);

    return $next($request);
}

标签: laravelvalidationmulti-tenant

解决方案


unique规则允许在检查唯一性时指定要使用的连接。

文档

自定义数据库连接

有时,您可能需要为验证器进行的数据库查询设置自定义连接。如上所示,设置unique:users为验证规则将使用默认数据库连接来查询数据库。要覆盖它,请使用“点”语法指定连接和表名:

'email' => 'unique:connection.users,email_address'

因此,在您的情况下,您的验证规则将更改为:

'title' => 'required|unique:tenant_mysql.posts|max:255',

推荐阅读