Laravel 验证“存在”在主从数据库配置中不起作用?

Posted

技术标签:

【中文标题】Laravel 验证“存在”在主从数据库配置中不起作用?【英文标题】:Laravel validation 'exist' not working in master-slave DB configuration? 【发布时间】:2019-11-10 13:31:50 【问题描述】:

我将项目移动到主从配置并遇到问题,与 DB 相关的验证停止为我工作。有什么我想念的想法吗?

所以这里是验证部分:

$request->validate([
  'property_id' => 'required|exists:mysql.property,p_id',
  ... other validations not related to DB ...
], $error_messages);

文件配置\database.php

'mysql' => [
    'driver' => 'mysql',

    'write' => [
        'host' => '196.168.56.211',
    ],
    'read' => [
        'host' => '192.168.56.222',
    ],
    'port' => '3306',
    'database' => 'project_db',
    'username' => 'db_user',
    'password' => 'pass123',
    'unix_socket' => env('DB_SOCKET'),

    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
    \PDO::ATTR_EMULATE_PREPARES => true,
],

这是我收到的:

在文件 \vendor\laravel\framework\src\Illuminate\Database\Connection.php [663] 中:

catch (Exception $e) 
    throw new QueryException(
        $query, $this->prepareBindings($bindings), $e
    );

SQLSTATE[HY000] [2002] 尝试建立连接 不成功,因为没有收到所需的响应 在要求的时间内,或已经建立的其他计算机 连接被终止,由于已经不正确的响应 连接的计算机。 (SQL: select count(*) as aggregate from property 其中p_id = 2444)

当 laravel 尝试连接到 'write' 数据库时会发生这种情况。 但来自 MySQL 工作台 - 连接和编辑记录很好。

有什么想法吗?

【问题讨论】:

【参考方案1】:

把你的配置改成

 'mysql' => [
    'write' => [
        'host' => '196.168.56.211'
    ],
    'read' => [
        'host' => '192.168.56.222',
    ],
    'sticky'    => true,
    'driver'    => 'mysql',
    'database'  => 'project_db',
    'username'  => 'db_user',
    'password'  => 'pass123',
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
],

这确保了在请求周期中写入的任何数据都可以在同一请求期间立即从数据库中读回

official document阅读了解更多信息

【讨论】:

您可以尝试删除 'strict' => false 并检查吗?还运行 php artisan config:clear b

以上是关于Laravel 验证“存在”在主从数据库配置中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

护照身份验证在 laravel 5.3 中不起作用

工作正则表达式在 laravel 验证中不起作用

Laravel 5.6 护照 API 身份验证在获取请求中不起作用

十六进制代码验证在laravel中不起作用[重复]

Laravel Sanctum Token API 身份验证在 Postman 中不起作用

注册在 Laravel 5 中不起作用