gpt4 book ai didi

php - 在 Laravel 关系上强制写入数据库连接

转载 作者:可可西里 更新时间:2023-11-01 00:39:58 26 4
gpt4 key购买 nike

我在我的 Laravel 应用程序中使用单独的 readwrite 连接:

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

通常,如果我想强制使用write 连接,我会写:

$user = User::onWriteConnection()->where('email', 'test@example.com')->first();

这很好用,直接在模型上。但是,如果我遇到这样一种情况,我需要在一个使用关系的特定方法中使用 write 连接,如下所示:

$user = User::find(123);

$user->universities()->attach(array(34, 56, 2));
$user->universities()->dettach(array(4, 78));

$primary = $user->universities()->where('primary', 1)->first();

// and so on...

我希望在 write 连接上完成所有那些基于关系的操作(不管它们实际上是读还是写)。

我如何在 Laravel 中执行此操作?

我尝试了什么:

(1) 在关系上使用 onWriteConnection() 方法 - 由于 method 而不起作用是静态的,直接连接到 Eloquent Model 对象。

(2) 使用setConnection()方法:

$user = User::find(123);
$user->setConnection('mysql.write');

这会引发错误,即 driver index is not specified for the connection - 这是有道理的,并证明这不是正确的方法。

最佳答案

您可以直接使用查询生成器的 useWritePdo() 方法,该方法在后台调用 onWriteConnection():

$primary = $user->universities()->useWritePdo()->where('primary', 1)->first();

关于php - 在 Laravel 关系上强制写入数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45303343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com