加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 如何从Laravel中的自定义查询中分块结果

发布时间:2020-12-14 19:41:33 所属栏目:大数据 来源:网络整理
导读:我有一个自定义查询,它从旧系统中获取数据并将其映射到新系统中的模型.查询如下所示: $companies = DB :: connection(‘legacy’) – select(“…”); 由于它是大量数据,我想使用Eloquent的块功能(只是从他们的文档中复制的示例代码): User::chunk(200,fun
我有一个自定义查询,它从旧系统中获取数据并将其映射到新系统中的模型.查询如下所示:

$companies = DB :: connection(‘legacy’) – > select(“…”);

由于它是大量数据,我想使用Eloquent的块功能(只是从他们的文档中复制的示例代码):

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();
    }
});
尝试这样的事情:
<?php

$max = 100;
$total = DB::connection('legacy')->select("...")->count();
$pages = ceil($total / $max);
for ($i = 1; $i < ($pages + 1); $i++) {
    $offset = (($i - 1)  * $max);
    $start = ($offset == 0 ? 0 : ($offset + 1));
    $legacy = DB::connection('legacy')->select("...")->skip($start)->take($max)->get();
    /* Do stuff. */
}

基本上重复了Laravel的Paginator所做的事情而没有额外的开销.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读