gpt4 book ai didi

database - 拉维尔 5.2 : Handling database insertions using the Laravel Queues service

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:30 25 4
gpt4 key购买 nike

早上好!

我的 Controller 中有以下代码:

$num_rows = $this->drupalRequestRowCount();
$uris = $this->drupalRequestPrepareUri($num_rows, config('constants.IMPORT_DATA_URI'));
$requestHandler = new RequestHandler($uris[0]);
$content = $requestHandler->httpRequest();

// Dispatch each URI for the job that will handle
// the insertion of our Drupal data.
foreach($uris as $uri) {
$job = (new DataJob($uri))->onQueue('data_export_insert');
$this->dispatch($job);
}

return 'Jobs dispatched';

我有一个 Drupal 数据库,其中包含我希望每晚与我的 Laravel 数据库同步的数据。我使用自己在 Drupal 中开发的 API,它返回我的 Laravel 数据库所需的大量数据。

API 最多返回 10 个项目(其中包含大量数据)。 Drupal 数据库有 +- 17000 项我需要每晚导入。我认为 Queue API 可能是一个很好的解决方案,可以批量导入数据而不是一次导入所有数据。我在 foreach 循环中遍历 $uris 数组,它根据我得到的 $num_rows 将偏移量附加到 API。

因此,如果 $num_rows 返回 17000 个项目,则 $uris 数组将包含 1700 个项目,如下所示:

[0] => 'http://mywebsite.com/api/request_data.json?offset=0'

[1] => 'http://mywebsite.com/api/request_data.json?offset=10'

[2] => 'http://mywebsite.com/api/request_data.json?offset=20'

这意味着我想要调度 1700 个作业,一旦我运行 php artisan queue:listen database 命令,Laravel 就会为我执行。

下面的代码是我要执行1700次的Job。

public function __construct($uri)
{
$this->uri = $uri;
}
public function handle()
{
try {
Log::info('Inserting data into database for uri: ' . $this->uri);

$requestHandler = new RequestHandler($this->uri);
$content = $requestHandler->httpRequest();

foreach($content as $key => $value) {
$id = $value->id;
$name = $value->name;
DB::insert('INSERT INTO table_1 (id, name) VALUES (?, ?)', [$id, $name]);
}
} catch(\Exception $e) {
Log::error('Error in job: '. $e->getMessage());
}
}

我的问题是作业根本没有执行。作业已正确分派(dispatch)到数据库,因为当我检查数据库中的 Jobs 表时,我可以在 Jobs 表中看到 1700 行。我尝试记录句柄函数,但是当我运行 php artisan queue:listenphp artisan queue:work 时没有任何反应。 failed_jobs 表也没有任何记录。

句柄函数没有被执行,所以我无法记录里面发生的任何事情。我尝试在 Internet 上查找带有示例的信息,但我只能找到一些我不需要的邮寄示例。

如有任何帮助,我们将不胜感激!

最佳答案

解决了这个问题。请确保您在作业代码中放置了 protected $payload!有效负载是您要传递给队列处理程序的数据!

关于database - 拉维尔 5.2 : Handling database insertions using the Laravel Queues service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39014059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com