Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A tiny extension of MySqlConnection that manages session system variables

License

NotificationsYou must be signed in to change notification settings

mpyw/laravel-mysql-system-variable-manager

Repository files navigation

A tiny extension ofMySqlConnection that managessession system variables

Requirements

PackageVersionMandatory
PHP^8.2
Laravel^11.0 || ^12.0
PHPStan>=2.0

Note

Older versions have outdated dependency requirements. If you cannot prepare the latest environment, please refer to past releases.

Installing

composer require mpyw/laravel-mysql-system-variable-manager

Basic Usage

Important

The default implementation is provided byMySqlConnectionServiceProvider, however,package discovery is not available.Be careful that you MUST register it inconfig/app.php by yourself.

<?phpreturn [/* ... */'providers' => [/* ... */Mpyw\LaravelMySqlSystemVariableManager\MySqlConnectionServiceProvider::class,/* ... */    ],];
<?phpuseIlluminate\Support\Facades\DB;// Assign an auto-recoverable system variable// The variable is reassigned on accidental disconnectionsDB::setSystemVariable('long_query_time',10.0);// Assign a system variable without auto-recoveryDB::setSystemVariable('long_query_time',10.0,false);// Assign multiple variablesDB::setSystemVariables(['long_query_time' =>10.0,'transaction_isolation' =>'read-committed']);// Assign a variable on a different connectionDB::connection('other_mysql_connection')->setSystemVariable('long_query_time',10.0);// Run callback temporarily assigning a variableDB::usingSystemVariable('long_query_time',10.0,function () {/* ... */});// Run callback temporarily assigning multiple variablesDB::usingSystemVariables(['long_query_time' =>10.0,'transaction_isolation' =>'read-committed'],function () {/* ... */});// Run callback replacing current value// NOTE: You MUST declare closure return types.DB::usingSystemVariables(    ['long_query_time' =>function (float$currentValue):float {return$currentValue +5.0;        },'sql_mode' =>function (string$currentValue):string {returnstr_replace('ONLY_FULL_GROUP_BY','',$currentValue);        },    ],function () {/* ... */    });

Caution

Don't useDB::disconnect() directly or auto-recovery won't be fired.
UseDB::connection()->disconnect() instead.

Advanced Usage

Tip

You can extendMySqlConnection withManagesSystemVariables trait by yourself.

<?phpnamespaceApp\Providers;useApp\Database\MySqlConnection;useIlluminate\Database\Connection;useIlluminate\Support\ServiceProvider;class DatabaseServiceProviderextends ServiceProvider{publicfunctionregister():void    {        Connection::resolverFor('mysql',function (...$parameters) {returnnewMySqlConnection(...$parameters);        });    }}
<?phpnamespaceApp\Database;useIlluminate\Database\ConnectionasBaseMySqlConnection;useMpyw\LaravelMySqlSystemVariableManager\ManagesSystemVariables;class MySqlConnectionextends BaseMySqlConnection{use ManagesSystemVariables;publicfunctionwithoutForeignKeyChecks(callable$callback, ...$args)    {return$this->usingSystemVariable('foreign_key_checks',false,$callback, ...$args);    }publicfunctionallowingPartialGroupBy(callable$callback, ...$args)    {return$this->usingSystemVariable('sql_mode',function (string$mode):string {returnstr_replace('ONLY_FULL_GROUP_BY','',$mode);        },$callback, ...$args);    }}
<?phpuseApp\Post;useIlluminate\Support\Facades\Auth;useIlluminate\Support\Facades\DB;$post =newPost();$post->user()->associate(Auth::user());$post->save();DB::withoutForeignKeyChecks(function ()use ($post) {$post->user()->associate(null);$post->save();});

About

A tiny extension of MySqlConnection that manages session system variables

Topics

Resources

License

Stars

Watchers

Forks

Contributors2

  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp