gpt4 book ai didi

php - 如何在 Laravel 中对自定义查询的结果进行分块

转载 作者:可可西里 更新时间:2023-11-01 12:29:45 27 4
gpt4 key购买 nike

我有一个自定义查询,它从旧系统中获取数据并将其映射到新系统中的模型。查询如下所示:

$companies = DB::connection('legacy')->select("...");

因为它有很多数据,我想使用 Eloquent 的 block 功能(只是从他们的文档中复制的示例代码):

User::chunk(200, function($users)
{
foreach ($users as $user)
{
//
}
});

我该如何实现?


编辑:我的代码现在看起来像这样,导致没有响应:

DB::connection('legacy')->select("SELECT * FROM companies")->chunk(200, function($companies) {
foreach ($companies as $company) {
// dd($company);
$entity = Entity::firstOrNew(['external_id' => $company->companyKey]);
$entity->name = $company->companyName;
$entity->save();
}
});

最佳答案

chunk 功能仅适用于 Eloquent 模型和 QueryBuilder 请求,例如

DB::table('tbl')->where('num', '>', 3)->chunk(500, function($rows) {
// process $rows
});

但它不适用于 DB::select('...') 请求。您需要使用 QueryBuilder 请求,或使用底层 PDO 对象来查询数据库,例如:

$pdo = DB::getPdo();
$sth = $pdo->prepare("SELECT ....");
$sth->execute();
while ($row = $sth->fetch(PDO::FETCH_ASSOC))
{
// ...
}

关于php - 如何在 Laravel 中对自定义查询的结果进行分块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048104/

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