我在Laravel应用程序中使用单独的读写连接:
'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,
],
通常,如果我想强制使用写连接,我会写:
$user = User::onWriteConnection()->where('email', 'test@example.com')->first();
这很好,直接在模型上.但是如果我有一个案例需要在一个使用关系的特定方法中使用写连接,如下所示:
$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...
我想要在写连接上完成所有那些基于关系的操作(无论它们实际上是读还是写).
我怎么在Laravel做这个?
我尝试了什么:
(1)对关系使用onWriteConnection()方法 – 由于method是静态的并且直接连接到Eloquent Model对象,因此不起作用.
(2)使用setConnection()方法:
$user = User::find(123);
$user->setConnection('mysql.write');
这会引发错误,即没有为连接指定驱动程序索引 – 这是有道理的,并证明它不是正确的方法.
解决方法:
您可以直接使用查询构建器的useWritePdo()方法,onWriteConnection()在场景后面调用:
$primary = $user->universities()->useWritePdo()->where('primary', 1)->first();
标签:laravel-5-4,php,laravel 来源: https://codeday.me/bug/20190828/1751206.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。