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
- 연결을 사용합니다.
나는 모두 default
당신이 아래에 볼 수있는 app/config/database.php
구성된 test
연결이 다음 var_dump
은 다음으로 밝혀
// ...
'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_',
),
),
// ...
: (OBS는 변화가 prefix
입니다), 당신이 볼 수있는 곳 $model->connection
이 변경되었습니다.
object(User)[159]
...
protected 'connection' => string 'default' (length=7)
...
하지만 스틸 사진 몇 가지 이유에 대한
테이블users
대신
test_users
로 들어갑니다.
누구나이 작업을 수행하는 방법을 알고 있습니까?
1. 데이터베이스 구성에'default'와'draft'가'default'와'test'가 아니지만, 그저 잊어 버린 것일뿐입니다. 현재 상황 인'$ connection'은'Model' 클래스의 protected 변수이므로'$ model-> connection = 'xyz';를 사용하여 편집 할 수는 없겠지만' $ model-> setConnection ('xyz');는 원하는 것을보다 정확하게 할 수 있습니다. 또는 어쩌면 나는 벗어났다. – alexrussell
@alexrussell, 당신은 구성에 대해 옳았습니다. 지적 해 주셔서 고맙습니다. 그러나'$ model-> setConnection ('xyz');를 사용하면'var_dump'에서 변경되지만 실제 SQL에서는 변경되지 않습니다. –
짧은 대답 : 당신은 그렇게 할 수 없습니다. 이 경우에는 이미 빌드 된'Query \ Builder'에서 연결을 바꿀 수 없습니다. –