Laravel:作业失败 - SQLSTATE [42S02]:找不到基表或视图

问题描述 投票:0回答:1

我正在使用Laravel v5.7开发一个多租户,并且我成功发送了队列电子邮件,因为我的模型已经定义了属性“连接”。

但是,当尝试使用Jobs类发送电子邮件时,同样失败并通知模型表不存在。

根据表'failed_jobs'中记录的错误,即使定义了属性'connection',作业仍然会尝试连接到主数据库而不是属性的指定数据库。

有没有办法在Job中指定要使用哪个数据库,因为在模型中通知了相同的数据库?

为database.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';
}

failed_jobs

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
laravel multi-tenant laravel-jobs
1个回答
0
投票

我想您正在尝试访问模板模型中的第二个连接TENANT001。

class Template extends Model
{
/**
 * The database name used by the model.
 *
 * @var string
 */
protected $connection = 'TENANT001';

protected $table='templates';

}

之后在config / database.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,
    ],

或者您可以在queue.php中使用连接

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

更新.env文件后清除缓存。

php artisan config:cache

并检查您是否已在.env中正确定义所有内容并且表存在。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.