web-dev-qa-db-ja.com

Laravel 5デフォルト以外のデータベースに接続するようにキューデータベースドライバーを構成するにはどうすればよいですか?

Laravel 5.1では、config/queue.phpでキュー接続構成を設定できます。

QUEUE_DRIVER=database

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'expire' => 60,
    ],

ただし、config/database.phpのデフォルトのデータベース接続のみを使用します。

2つのデータベース、ローカルホストに1つのデフォルトデータベースmysql1、リモートサーバーに1つのデータベースmysql2があり、キューjobsテーブルがリモートデータベースmysql2にある場合、リモートmysql2データベースを使用するようにキューデータベースドライバーを構成するにはどうすればよいですか?メインアプリはローカルホストのデフォルトデータベースを使用していることに注意してください。

9
userpal

'connection'queue.phpパラメーターを使用して、(database.phpで定義したものから)正しいデータベース接続を設定できます。

'database' => [
    'connection' => 'mysql2',
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'expire' => 60,
], 

私は同じものを探していて、ソースコードでそれを見つけました。

注:これにより、この接続からジョブが読み取られるだけでなく(キューを実行している場合)、この接続にジョブが書き込まれます(新しいジョブをディスパッチする場合)。

25
DraughtGlobe

ここでのベストアンサーは私にとってはうまくいきませんでした。私のものとは別の問題に対するベストアンサーではないことは言うまでもありません。私の問題は、Laravelが私の設定設定をキャッシュしなかったということでした。

ファイル\ config\queue.phpに移動し、デフォルトのドライバーを変更した後...

'default' => env('QUEUE_DRIVER', 'database'),

キューはまだ同期ドライバーで実行されていました。

次に、ファイルを確認しました...

    \bootstrap\cache\config.php

30行目あたりでこれを見ました...

 'queue' => 
array (
'default' => 'sync', 

...しかし、データベースに接続するには、次のようにする必要があります...

 'queue' => 
array (
'default' => 'database',

これで問題は解決しました...

php artisan config:cache

Config:cacheコマンドを実行すると、config.phpファイルが現在のドライバー設定に書き換えられます。

5
Jed Lynch

モデルに$connection変数を設定できます。これはEloquentクエリにのみ影響し、Fluid QueryBuilderでは機能しないことに注意してください。

class Jobs extends Eloquent {
    protected $connection = "database2"     
}

もちろん、これには、config/database.phpである'database2' => [...]ファイルに2番目のnamed接続が必要です。

1
Ohgodwhy