Laravel读/写连接 - 明确指定

时间:2016-05-31 16:09:59

标签: php database laravel-5

我正在尝试以方便的方式配置主/从数据库连接。我遇到的更简洁的方法是在数据库配置文件中单独使用读/写主机。

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
],

在某些情况下,我需要从主数据库中读取数据(没有复制延迟)。有没有办法明确指定这个?像我们将连接名称传递给connection()方法?

4 个答案:

答案 0 :(得分:4)

如果您想强行使用单行内容中的写连接,您可以随时执行以下操作:

$user = User::onWriteConnection()->find(1);

答案 1 :(得分:2)

几分钟后我发现可以通过指定' mysql :: write'到db连接方法。因此,如果我们需要使用我的问题中的配置从主数据库中读取数据,我们可以执行类似DB::connection('mysql::write')的操作。希望它对其他人有用。

答案 2 :(得分:1)

我首先要创建两个独立的mySql连接,mysqlMaster和mysqlSlave。然后我将mysqlSlave设置为默认值。

然后,您可以在需要访问主连接时使用函数setConnection(' mysqlMaster')。

$model = new Model();
$model->setConnection('mysqlMaster');
$result = $model->find(1);

答案 3 :(得分:1)

我分别创建了读取/写入主机,并且在应用程序中遵循模块化方法。如果要强制特定模型从 write 头获取数据,则在Laravel模型中,您需要定义连接,例如:

class YourModelName extends Model {
  protected $connection = 'mysql::write';
  public $table = 'YourTableName';
}

在上面的示例中, protected $ connection ='mysql :: write'; 强制您的应用程序在您使用 YourModelName <的地方从写头执行 mysqlselect 语句/ strong>