laravel - 如何在 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);
}
解决方案
该unique
规则允许在检查唯一性时指定要使用的连接。
从文档:
自定义数据库连接
有时,您可能需要为验证器进行的数据库查询设置自定义连接。如上所示,设置
unique:users
为验证规则将使用默认数据库连接来查询数据库。要覆盖它,请使用“点”语法指定连接和表名:'email' => 'unique:connection.users,email_address'
因此,在您的情况下,您的验证规则将更改为:
'title' => 'required|unique:tenant_mysql.posts|max:255',
推荐阅读
- oracle - JMeter 5.2.1 - 连接属性被忽略
- servicestack - 带有 emitLowercaseUnderscoreNames = true 的 Servicestack JsConfig 不适用于具有字母数字名称的属性
- git - 如何获取最新创建的远程 Git 分支列表?
- go - 在 Couchbase 中插入只读文档
- docker - 如何停止docker自动启动jupyter笔记本
- angular - 我使用 canDeactive 时如何使用 Skiplocation
- java - 在 Java 中使用下一行打印字符串(斑马线模式)
- google-chrome - 与 http://local ip/ 上的跨站点资源关联的 cookie 被设置为没有 `SameSite` 属性
- wordpress - 如何确保在 Wordpress 中进行缓存
- django - 获取验证错误字段不能为空,即使模型中的 null=True