调用start()时找不到带有Laravel - Model类的线程


Thread with Laravel - Model class not found when calling start()

我正在使用Laravel 5.1,我试图在一个命令类中启动几个线程:

$documents->chunk(1000, function($documentChunk) use (&$threads, &$threadNumber, &$repository) {
    $threads[$threadNumber] = new MyThread($documentChunk);
    $threads[$threadNumber]->start();
    $this->info("Thread [".$threadNumber."] running");
    $threadNumber++;
});

$documents变量之前已经填充了从数据库中检索到的一些数据

在MyThread类中是这样的:

<?php namespace App'Helpers;
use Download;
class MyThreadextends 'Thread {
    protected $chunk;
    public function __construct($chunk) {
        $this->chunk = $chunk;
    }
    public function run() {
        ...
        $downloads = Download::select(...);
        ...
    }
}

在选择行,我得到一个:

PHP致命错误:Class 'Download' not found

然而,如果我直接调用$threads[$threadNumber]->run()而不是$threads[$threadNumber]->start(),我没有这个错误。也许这是一个类加载的问题,但我不知道真正的问题是什么,如果它可以解决…

如果有人能帮我解决这个问题,我将非常感激,因为我已经花了几个小时来解决这个问题。

谢谢,克里安。

你需要设置自动加载器,这里有帮助

我想这个例子是Symfony,但同样的事情也适用。

我终于找到了一个解决方法。我不再使用线程,但Guzzle。位于我的线程中的代码现在在一个控制器方法中,可以通过URL访问-我做了一个REST API。Guzzle允许我执行异步请求,这正是我想要做的。

查看Laravel的Guzzle文档获取更多信息。