我正在尝试更改php.ini中的memory_limit,php.ini使用新的内存大小保存正常,但我一直在获得相同的内存大小问题?我正在使用Laravel 5.5和Homestead。
如果有人可以帮助我,我将不胜感激。谢谢!
以下是试图运行的代码(将数据从一个数据库导入另一个数据库,其余表除了一个之外都很好)
$repair = DB::connection('db')->table('tablename')->get();
DB::beginTransaction();
foreach ($repair as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
};
DB::commit();
答案 0 :(得分:0)
您正在内存中加载整个表格。不要这样做。
使用chunk并将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();
});
答案 1 :(得分:0)
管理解决它,这是代码:
$query = DB::connection('db')->table('tablename')->orderBy('id',
'asc');
$query->chunk(50, function ($ServiceOrders) {
DB::transaction(function() use ($ServiceOrders) {
foreach ($ServiceOrders as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
}
});
});
答案 2 :(得分:-1)
尝试
$repair = DB::connection('db')->table('tablename')->get();
DB::beginTransaction();
foreach ($repair as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
sleep ( 15 )
};
DB::commit();
可能是你正在处理繁重的事情,因为你没有发布完整的代码,我认为你应该在每笔交易后使用睡眠