Laravel v5.7 でマルチ テナントを開発していますが、モデルに「接続」プロパティが定義されているため、キュー メールの送信に成功しています。
しかし、たとえば Jobs クラスを使用して電子メールを送信しようとすると、同じことが失敗し、モデルのテーブルが存在しないことが通知されます。
テーブル 'failed_jobs' に記録されたエラーから、プロパティ 'connection' が定義されていても、ジョブはプロパティの指定されたデータベースではなく、メイン データベースに接続しようとしているように見えます。
同じことがモデルで通知されるため、使用するデータベースをジョブで指定する方法はありますか?
データベース.php
'connections' => [
'others' => ['...']
'TENANT001' => [
'driver' => 'mysql',
'database' => env('TENANT001_DATABASE', ''),
'host' => env('TENANT001_HOSTNAME', ''),
'port' => env('DB_PORT', '3306'),
'username' => env('TENANT001_USERNAME', 'forge'),
'password' => env('TENANT001_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
]、
サンプルモデル
class Template extends Model
{
/**
* The database name used by the model.
*
* @var string
*/
protected $connection = 'TENANT001';
}
失敗したジョブ
PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'main_database.templates' doesn't exist in /www/samba/laravel.local/vendor/laravel/framework/src/Illuminate/Database/Connection.php:326