Laravel: задания не выполнены - SQLSTATE [42S02]: базовая таблица или представление не найдены - PullRequest
0 голосов
/ 15 февраля 2019

Я разрабатываю Multi Tenant с Laravel v5.7, и я успешно отправляю электронные письма в очереди, поскольку в моих моделях определено свойство 'connection'.

Но при попытке отправить, например,сообщение электронной почты, в котором используется класс Jobs, тот же отказывает и сообщает, что таблица модели не существует.

Из какой ошибки, записанной в таблице failed_jobs, даже с определенным свойством connection, она появляетсячто Job, тем не менее, пытается подключиться к основной базе данных, а не к указанной базе данных свойства.

Есть ли способ указать в 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

1 Ответ

0 голосов
/ 15 февраля 2019

Я полагаю, вы пытаетесь получить доступ ко второму соединению 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,
    ],

Или вы можете использовать соединение вthe queue.php

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

И очистите кеш, как только вы обновите файлы .env.

php artisan config:cache

И убедитесь, что вы все правильно определили в .env и таблица существует.

Спасибо

...