我想知道,为了更改get
- Illuminate\Database\Query\Builder
方法中的连接,是否有任何黑客攻击。
我已使用自定义Query\Builder
方法扩展了get
。
问题是我没有看到任何方法来更改Query\Builder
的连接。改变连接是否为时已晚?或者我可以扩展任何东西,以便能够更改get
- 方法中的连接。
为什么我试图这样做,是因为我正在为laravel创建一个包来控制模型中的2个连接。
因此,我们希望他们希望用户在从Connection #1
获取数据时使用MyModel
,但如果用户是Admin
,那么他们应该从{{1}获取数据}。但他们仍应将数据保存到Connection #2
。
有点难以解释,但有没有一种方法可以用来改变Connection 1
方法中的连接。
我并没有找到改变get
方法中实际连接的方法,因为这给我带来了很多其他麻烦。
答案 0 :(得分:2)
Query\Builder
在这里没有帮助,因为无法更改已经实例化的构建器上的连接。
但是,connection
是您可以在get
方法中交换的依赖项。只需将$this->connection
替换为另一个ConnectionInterface
。您可以使用ConnectionFactory
。
然而,对于您来说,可能有更好的方式 - Read/Write
连接。 Laravel可以很容易地为读写语句使用不同的设置,所以我建议你只需将配置设置为:
'mysql' => array(
'driver' => 'mysql',
'host' => HOST,
'database' => DB,
'username' => USER,
'password' => PASS,
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'mysql_for_admin' => array(
'driver' => 'mysql',
'write' => [
'host' => HOST,
'database' => DB,
'username' => USER,
'password' => PASS,
],
'read' => [
'host' => ANOTHER_HOST,
'database' => ANOTHER_DB,
'username' => ANOTHER_USER,
'password' => ANOTHER_PASS,
]
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
只需根据您的需要调整这些条目,并根据用户的角色使用连接。
阅读有关读/写连接的更多信息:http://laravel.com/docs/database#read-write-connections