首页 > 解决方案 > Laravel 验证器问题

问题描述

使用sqlsrv驱动程序,我在具有已定义架构的数据库上使用 Laravel Validator 时遇到问题。

使用该行访问任何模型上的数据库都没有问题 protected $table = 'dba.users'

但是当我在验证器上使用它时

return Validator::make($data, [
            'name' => 'required|string|max:255|unique:dba.users',
]);

它产生错误:

Database [dba] not configured. 

我尝试使用

return Validator::make($data, [
                'name' => 'required|string|max:255|unique:sqlrv.dba.users',
]);

但它产生

Invalid object name 'app.users'. (SQL: select count(*) as aggregate from
[app].[users] where [name] = test

从哪儿开始?

标签: laravelvalidationsqlsrv

解决方案


如果这是您拥有的唯一数据库连接,则无需指定数据库,因此您可以执行以下操作:

return Validator::make($data, [
    'name' => 'required|string|max:255|unique:users',
]);

但是,如果您使用多个数据库,则需要确保在config/database.php文件中指定了这些数据库的名称。查看该文件并查看此处https://laravel.com/docs/5.6/database#using-multiple-database-connections。文档不是那么清楚,所以我将在下面更详细地概述它。

在您的database.php文件中,您将找到一个connections数组。像这样添加您的dba连接:

'connections' => [
    'dba' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST_2', '127.0.0.1'),
        'port' => env('DB_PORT_2', '3306'),
        'database' => env('DB_DATABASE_2', 'forge'),
        'username' => env('DB_USERNAME_2', 'forge'),
        'password' => env('DB_PASSWORD_2', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
]

在您的.env文件中设置上面显示的新值。

你的database.php文件告诉 laravel 你有哪些数据库连接以及在哪里寻找它们。完成此操作后,您的验证器将在您指定数据库时知道在哪里查找。


推荐阅读