【问题标题】:artisan queue to work in class with variable values工匠队列以可变值在课堂上工作
【发布时间】:2015-01-22 19:48:12
【问题描述】:

我想将以下 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();
    });

但它会抛出

'缺少 Jeremeamia\SuperClosure\SerializableClosure::{closure}() 的参数 2

当尝试运行 php artisan queue:work 时

$dbname

设置为

$dbname = $this->getDbName();

并且整个代码驻留在一个类的函数中。

我也尝试在闭包中直接使用$this->getDbName()$this->dbName,但这自然是行不通的。

这样的命令不能在队列中运行吗?

【问题讨论】:

    标签: php laravel queue laravel-5


    【解决方案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();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 2015-04-23
      • 1970-01-01
      • 2021-11-04
      • 2017-01-09
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多