php - Force the write database connection on Laravel relationships -
i'm using separate read , write connections in laravel app:
'mysql' => [ 'write' => ['host' => env('db_host_write', 'localhost'),], 'read' => ['host' => env('db_host_read', 'localhost'),], 'driver' => 'mysql', 'port' => env('db_port', '3306'), 'database' => env('db_database', 'very'), 'username' => env('db_username', 'secret'), 'password' => env('db_password', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ], normally, if i'd force write connection used, i'd write:
$user = user::onwriteconnection()->where('email', 'test@example.com')->first(); this works fine, directly on model. if have case need use write connection throughout 1 specific method uses relations, this:
$user = user::find(123); $user->universities()->attach(array(34, 56, 2)); $user->universities()->dettach(array(4, 78)); $primary = $user->universities()->where('primary', 1)->first(); // , on... i'd all relation-based operations (regardless whether are, in fact, read or write ones) done on write connection.
how do in laravel?
what tried:
(1) using onwriteconnection() method on relations - doesn't work due fact method static , directly connected eloquent model object.
(2) using setconnection() method:
$user = user::find(123); $user->setconnection('mysql.write'); which throws error driver index not specified connection - makes sense , proves it's not right way it.
you directly use usewritepdo() method of query builder, onwriteconnection() calls behind scene:
$primary = $user->universities()->usewritepdo()->where('primary', 1)->first();
Comments
Post a Comment