仅对一个查询禁用MySQL Strict Mode Laravel 5.6

Mȍh*_*mȋm 3 php mysql laravel-5

我只想对控制器内部的一个查询禁用MySQL严格模式,而不对整个laravel应用程序禁用,

我知道禁用MySQL严格模式的风险,因此我不想从config / database.php为整个应用程序禁用它,

我在整个应用程序中仅遇到一个查询,因此我想在我的控制器中禁用它,然后只运行一次查询!

请帮助我有给定情况下的任何方法。

Max*_*rav 6

在运行时更改严格模式

config()->set('database.connections.mysql.strict', false);
\DB::reconnect(); //important as the existing connection if any would be in strict mode
Model::select()->get(); // your query called in non strict mode

//now changing back the strict ON
config()->set('database.connections.mysql.strict', true);
\DB::reconnect();
Run Code Online (Sandbox Code Playgroud)

  • 尽管它有效,但断开连接会破坏所涉及的任何事务。仅当您的查询不是事务的一部分时才有效。谨慎使用。 (3认同)

Jon*_*eir 5

将其用于 MySQL \xe2\x89\xa45.7 (取自此处):

\n\n\n\n
DB::statement("set session sql_mode=\'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\'");\n// your query\nDB::statement("set session sql_mode=\'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\'");\n
Run Code Online (Sandbox Code Playgroud)\n


小智 2

在 config/database.php 中,执行如下操作:

'连接' => [

    'mysql' => [

        // Behave like MySQL 5.6

        'strict' => false,

        // Behave like MySQL 5.7
        'strict' => true,
    ]
Run Code Online (Sandbox Code Playgroud)

]