【问题标题】:Change connection on Builder->get()在 Builder->get() 上更改连接
【发布时间】:2014-12-12 13:57:24
【问题描述】:

我想知道,有没有什么技巧可以改变Illuminate\Database\Query\Builder的get方法中的连接。

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

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

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

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

这有点难以解释,但是我可以使用一种方法来更改get-方法中的连接。

而且我不是在寻找一种方法来更改newQuery-方法中的实际连接,因为这会给我带来很多其他麻烦。

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2012-12-04
      • 2018-09-27
      • 2016-09-29
      • 1970-01-01
      • 2014-09-11
      • 2015-05-11
      相关资源
      最近更新 更多