2014-12-02 3 views
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로 들어갑니다.

누구나이 작업을 수행하는 방법을 알고 있습니까?

+2

1. 데이터베이스 구성에'default'와'draft'가'default'와'test'가 아니지만, 그저 잊어 버린 것일뿐입니다. 현재 상황 인'$ connection'은'Model' 클래스의 protected 변수이므로'$ model-> connection = 'xyz';를 사용하여 편집 할 수는 없겠지만' $ model-> setConnection ('xyz');는 원하는 것을보다 정확하게 할 수 있습니다. 또는 어쩌면 나는 벗어났다. – alexrussell

+0

@alexrussell, 당신은 구성에 대해 옳았습니다. 지적 해 주셔서 고맙습니다. 그러나'$ model-> setConnection ('xyz');를 사용하면'var_dump'에서 변경되지만 실제 SQL에서는 변경되지 않습니다. –

+0

짧은 대답 : 당신은 그렇게 할 수 없습니다. 이 경우에는 이미 빌드 된'Query \ Builder'에서 연결을 바꿀 수 없습니다. –

답변

0

Eloquent의 save -method를 재정 의하여이 작업을 수행 할 수있는 방법을 알아 냈습니다.

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'); 
} 
관련 문제