我正在尝试更改php.ini中的memory_limit,php.ini使用新的内存大小可以很好地保存,但是我不断遇到相同的内存大小问题?我在Homestead上使用Laravel 5.5。
如果有人可以帮助我,将不胜感激。谢谢!
这是试图运行的代码(将数据从一个数据库导入另一个数据库,除一个表外,其余表都可以)
$repair = DB::connection('db')->table('tablename')->get();
DB::beginTransaction();
foreach ($repair as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
};
DB::commit();
您正在将整个表加载到内存中。不要那样做
使用块并将create方法放置在其自己的函数中。自身函数的原因是它为php空间提供了开始内部清理使用过的变量等的空间,因为作用域结束了。
还要gc_collect_cycles()
在事务结束时调用,以强制清除未使用的变量。
这将使您的方式保持在可接受的内存范围内。如果仍然击中,则每次尝试250或100。
$query = DB::connection('db')->table('tablename')->orderBy('id','asc');
$query->chunk(500, function($results) {
DB::beginTransaction();
$repairMethod = function($repair) {
Model::create([
'column' => $repair->column,
...so on
]);
};
foreach ($results as $repair) {
$repairMethod($repair)
};
DB::commit();
gc_collect_cycles();
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句