6

~20K レコードを DB に挿入しようとすると、問題が発生します。foreach ループ内でエコーしているにもかかわらず、コマンド ラインに何も出力されていないことに気付きました。代わりに、関連する〜9440レコードを挿入した後にエラーが発生します...

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 91 bytes) in /Users/me/Sites/Laravel/database/connection.php on line 293

これが私のコードです(EloquentとFluentの両方を使用してみました):

<?php

class Process_Controller extends Base_Controller
{
    public function action_migrate()
    {
        $properties = DB::table('raw_properties')->get('id');
        $total = count($properties);

        foreach ($properties as $x => $p) {
            $r = RawProperty::find($p->id);
            $count = $x + 1;

            $prop_details = array(
                'column' => $r->field,
                // Total of 21 fields
            );

            DB::table('properties')->insert($prop_details);

            echo "Created #$count of $total\n";
        }
    }
}
4

2 に答える 2

34

受け入れられた答えは、問題ではなく症状を修正することです。問題は、大量のクエリを実行すると、Laravel クエリ ログ (メモリ内) がすべての RAM を消費することです。ここで答えを参照してください: https://stackoverflow.com/a/18776710/221745

または、簡単に言うと、次の方法でクエリ ログをオフにします。

DB::disableQueryLog()

20k クエリを実行する前に

于 2013-09-23T17:53:20.910 に答える
0

このエラーは、スクリプトに割り当てられたメモリが不足しているため、PHP スクリプトがメモリ制限を使い果たしたことを示しています。

ini_set('memory_limit','128M'); などの ini_set 関数を使用して、memory_limit を増やす必要があります。

于 2012-09-16T00:59:10.640 に答える