更改保存事件的连接

时间:2014-12-02 15:30:06

标签: laravel laravel-4

我试图更改保存事件的连接。以下是我到目前为止所做的事情:

我在saving方法上制作和活动:

protected static function boot()
{
    parent::boot();

    static::saving(function($model)
    {
        $model->connection = 'test';
        var_dump($model);
        return $model;
    });
}

然后我在User上保存。

$user = new User();
$user->save();

完成后,它仍然使用默认的connection而不是我设置的test - 连接。

我在default中配置了testapp/config/database.php连接,您可以在下面看到:( OBS:更改为prefix

// ...
'connections' => array(

    'default' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'database',
        'username'  => 'username',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    'test' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'database',
        'username'  => 'username',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'test_',
    ),

),
// ...

var_dump结果如下,您可以看到$model->connection已被更改。

object(User)[159]
  ...
  protected 'connection' => string 'default' (length=7)
  ...

但由于某些原因,它仍然会进入表users而不是test_users

有没有人知道如何使这项工作?

1 个答案:

答案 0 :(得分:0)

我通过重写Eloquent的save方法找到了一种方法。

public function save(array $options = array())
{
    // set draft connection
    Config::set('database.default', 'test');

    // do the actual save
    parent::save($options);

    // change back to original connection
    Config::set('database.default', 'default');
}