ремесленная очередь на работу в классе со значениями переменных

Я хотел бы поставить в очередь следующую инструкцию pdo для создания базы данных, подобной этой:

    Queue::push(function($job, $dbname){
$dbh = new PDO("mysql:host=".getenv('DB_HOST'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'));

$dbh->exec("CREATE DATABASE `$dbname` CHARACTER SET=utf8 COLLATE=utf8_unicode_ci;
GRANT ALL ON `$dbname`.* TO 'xxx'@'%';
FLUSH PRIVILEGES;");

unset($dbh);
Log::useFiles(storage_path().'/logs/databasecreated');
Log::info('database created: '.$dbname);
$job->delete();
});

Но это бросает

«Отсутствует аргумент 2 для Jeremeamia \ SuperClosure \ SerializableClosure :: {closure} ()

при попытке запустить php artisan queue: work

$dbname

устанавливается как

$dbname = $this->getDbName();

и весь код находится в функции класса.

Я также пытался использовать $this->getDbName() а также $this->dbName непосредственно в закрытии, но это, естественно, не сработало.

Разве нельзя запускать такие команды в очереди?

-1

Решение

Попробуйте передать переменную с use заявление:

Queue::push(function($job) use ($dbname){
$dbh = new PDO("mysql:host=".getenv('DB_HOST'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'));

$dbh->exec("CREATE DATABASE `$dbname` CHARACTER SET=utf8 COLLATE=utf8_unicode_ci;
GRANT ALL ON `$dbname`.* TO 'xxx'@'%';
FLUSH PRIVILEGES;");

unset($dbh);
Log::useFiles(storage_path().'/logs/databasecreated');
Log::info('database created: '.$dbname);
$job->delete();
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]