首页 > 解决方案 > Laravel 验证“存在”在主从数据库配置中不起作用?

问题描述

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

所以这是验证部分:

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

文件 config\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 propertywhere p_id= 2444)

当 laravel 尝试连接到“写入”数据库时,就会发生这种情况。但从 MySQL 工作台 - 连接和编辑记录很好。

有任何想法吗?

标签: phpmysqllaravelvalidationmaster-slave

解决方案


将您的配置更改为

 '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'    => '',
],

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

阅读官方文档以获取更多信息


推荐阅读