php - 如何使用 Laravel 的 block 来避免内存不足?

标签 php mysql laravel laravel-4 eloquent

我从临时表中提取大约 10 万条记录,对数据进行一些轻微修改,下载照片,然后将我需要保留的字段放入“主”表中。这很快导致我的应用程序在内存不足时崩溃。

我阅读了有关将 chunk() 与 Laravel Eloquent 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";
        });
    }

}

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

在这个例子中我应该把 block 放在哪里?它会替换行吗:

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

我不完全理解 Eloquent 文档中的闭包。这就是他们要说的全部内容,这是来自 Laravel 网站的代码示例:

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

最佳答案

chunk 调用应替换 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";
    });
});

关于php - 如何使用 Laravel 的 block 来避免内存不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28082279/

相关文章:

php - php函数前的@符号

php - CodeIgniter 的 ci_sessions 是否需要偶尔清空?

php - MySQL中的Strtotime查询[基本PHP页面]

php - 如何计算具有相同列数据的行数并显示到表中?

php - 从下拉列表中获取数据在 laravel 中显示错误

javascript - 如何在聊天中为用户定义颜色

php - laravel-snappy:文件未创建

php - Laravel 5 - 在 header 而不是 JSON 中对结果进行分页

MySQL 多个 SELECT 语句

php - Laravel 的 Eloquent 使用什么范式?