1
我試圖更改保存事件的連接。以下是我迄今所做的:更改保存事件的連接
我做和事件的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
-connection我已經設置。
我同時具有default
和test
連接在app/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.你的數據庫配置有'default'和'draft'而不是'default'和'test',但我猜這只是一個忘記編輯的事情。至於手頭的情況 - '$ connection'是'Model'類的受保護變量,所以不太可能使用'$ model-> connection ='xyz';'編輯它,但是您可能會發現調用' $ model-> setConnection('xyz');'會更正確地做你想做的事情。或者,也許我走了。 – alexrussell 2014-12-02 15:50:55
@alexrussell,你說得對,關於配置,謝謝指出。但是使用'$ model-> setConnection('xyz');'也可以在'var_dump'中進行更改,但不會在實際的SQL中進行更改。 – 2014-12-02 16:06:30
簡短的回答:你不能那樣做。您不能在已建好的'Query \ Builder'上交換連接,這就是這種情況。 – 2014-12-02 16:22:32