1

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
4

1 に答える 1