2016-05-07 3 views
5

にあるデータベースからデータベースレコードをコピーします"default"データベース接続から取得し、2番目のデータベース接続(config/database.phpで定義)に保存する必要があります。私が見つけることができないのは、モデルのsave()メソッドを使用してデフォルト接続以外のデータベースに保存する方法です。Laravel 4.2:私はコピーする必要があるモデルをロード職人のタスクを書いている私はLaravel 4.2</p> <p>に別のデータベースからレコードのサブセットをコピーする必要があり、別の

これは可能ですか?私のセーブを2番目のデータベース接続に "プッシュ"することはできますか?または、「プル」ロジックに変更し、データベース接続定義を逆にし、「デフォルト」に保存する前に「セカンド」接続からデータをロードする必要がありますか?

答えて

1

が示されており、それはモデルを保存する前に、第二(宛先)データベースへのモデルの接続を設定する必要があります。

idをnullに設定する必要があります(ただし、2番目のデータベースにそのIDのレコードが存在しないことが確実でない限り、新しい増分ID値が割り当てられることはありません)。

また、保存する前にモデルのexistsプロパティをfalseに設定する必要があります。レコードが新しいレコードとして作成されるのではなく、そこから正常に読み取られたため、ソースデータベースからレコードを読み取った後、この値はモデル内でtrueです。 existsのリセットに失敗したため、LaravelはUPDATE WHERE id = $model->idを実行しようとしましたが、これは更新する一致するレコード(null id付き)がなかったためデータベースに何も書き込まれませんでした。 existsからfalseに設定すると、保存が確実にINSERTとして実行されます。

1

あなたはapp/conifg/database.phpでsecoundary接続を定義する必要があり、その後、例えばconnectionsではまず第一に:

'second_db_conn' => [ 
     'driver' => 'mysql', 
     'host'  => $_SERVER['MYSQL_HOST'], 
     'database' => $_SERVER['MYSQL_DATABASE'], 
     'username' => $_SERVER['MYSQL_USERNAME'], 
     'password' => $_SERVER['MYSQL_PASSWORD'], 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ], 

その後youtはモデルにこの接続を設定する - それを保存 - し、デフォルトに戻す(私の中で例)mysqlある:@Filipとして

$model->setConnection('second_db_conn')->save(); 
$model->setConnection('mysql'); 
+1

ありがとうございます、私はモデルで接続を設定する必要があることを最終的に試しました....これはINSERTではなくUPDATEトランザクションを実行しようとしたことを除いては....ソリューションは明示的に ' 'model'は' save() 'を実行する前に' false'を返します。そうでなければ 'exists'プロパティは最初のデータベース接続の読み込みから常に真ですから、LaravelはそれをUPDATEとして扱い、UPDATEはレコード既に第2のデータベースに存在していた –

関連する問題