在Builder-> get()上更改连接

时间:2014-12-12 13:57:25

标签: php laravel laravel-4 eloquent query-builder

我想知道,为了更改get - Illuminate\Database\Query\Builder方法中的连接,是否有任何黑客攻击。

我已使用自定义Query\Builder方法扩展了get

问题是我没有看到任何方法来更改Query\Builder的连接。改变连接是否为时已晚?或者我可以扩展任何东西,以便能够更改get - 方法中的连接。

为什么我试图这样做,是因为我正在为laravel创建一个包来控制模型中的2个连接。

因此,我们希望他们希望用户在从Connection #1获取数据时使用MyModel,但如果用户是Admin,那么他们应该从{{1}获取数据}。但他们仍应将数据保存到Connection #2

有点难以解释,但有没有一种方法可以用来改变Connection 1方法中的连接。

我并没有找到改变get方法中实际连接的方法,因为这给我带来了很多其他麻烦。

1 个答案:

答案 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