微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何使用Laravel的块来避免内存不足?

我从临时表中提取了大约100k的记录,对数据进行了一些细微的修改,下载了照片,然后将我需要保存的字段保存在“主”表中.这很快导致我的应用程序因内存不足而崩溃.

我阅读了关于使用chunk()和Laravel雄辩的ORM的非常简短的文档,但是不知道如何在我的课堂上开始实现它.

这是我目前正在做的事情:

public function fire()
{
    // Turn off query logging
    DB::connection()->disableQueryLog();

    $Feeds = RetsFeed::where('active','=',1)->get();
    foreach ($Feeds as $Feed)
    {

        $class = "TempListing{$Feed->board}";

        $listings = $class::orderBy('MatrixModifiedDT','desc')->get();

        $listings->each(function($listing) use ($Feed) {
            ListingMigrator::migrateListing($listing,$Feed);
            echo "Feed: $Feed->board\r\n";
            echo "SubcondoName: $listing->SubCondoName\r\n";
            echo "Development: $listing->Development\r\n";
            echo "\r\n";
        });
    }

}

每个提要(或数据源)都被转储到不同家务中的临时表中.这很好.然后,我从一个表中获取所有hte列表(平均大约30k)并运行我的ListingMigrator方法.

在这个例子中我把块放在哪里?它会取代这条线:

$listings = $class::orderBy('MatrixModifiedDT','desc')->get();

我并不完全理解雄辩文档中的结束.这就是他们要说的全部内容,这里是Laravel网站的代码示例:

User::chunk(200,function($users)
{
    foreach ($users as $user)
    {
        //
    }
});
调用应该替换get调用 – 它被设计为处理pre-get()查询构建器对象.
$listings = $class::orderBy('MatrixModifiedDT','desc');

$listings->chunk(200,function($listings) use($Feed) {
    $listings->each(function($listing) use ($Feed) {
        ListingMigrator::migrateListing($listing,$Feed);
        echo "Feed: $Feed->board\r\n";
        echo "SubcondoName: $listing->SubCondoName\r\n";
        echo "Development: $listing->Development\r\n";
        echo "\r\n";
    });
});

原文地址:https://www.jb51.cc/laravel/135066.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。