我正在尝试使用新描述更新我的项目模型,但是当执行ConsoleCommand时,它会抛出内存不足。如果我创建一个新项目模型,则没有问题。我怀疑它会尝试更新所有记录而不是我指出的项目。
val df = sqlContext.read
.format("elasticsearch")
.option("es.nodes", "node1.cluster1:9200")
.load("your_index/your_type")
df.write
.option("es.nodes", "node2.cluster2:9200")
.save("your_new_index/your_new_type")
PHP致命错误:第2710行的.. \ vendor \ illuminate \ support \ Str.php中允许的内存大小为134217728字节(试图分配65488字节)
PHP致命错误:第2710行的.. \ vendor \ illuminate \ support \ Str.php中允许的内存大小为134217728字节(试图分配65488字节)
$items = Item::query()->where('description', '=', '')->get();
foreach ($items as $item) {
if ($item->exists()) {
$item->description = "new description";
$item->save();
}
}
EDIT1:
这个问题集中在为什么$ item-> save()的调用导致内存不足。当只有一个模型试图保存/更新时。
EDIT2:
为什么以下代码仍会丢失内存?
count($items) = 3255
count($item) = 1
$items->count() = 3255
$item->count() = 3255
但不是在使用以下内容而不是 - > save():
时$item = Item::where('description', '=', '')->first();
$item->description = "new description";
$item->save();
答案 0 :(得分:1)
您正在查询所有项目,这就是您收到错误的原因。这就像将表中的所有数据复制到内存中一样。如果每行的描述不同,请尝试使用update()
方法一个接一个地更新行:
foreach ($data as $row) {
Item::where('description', 'old description')
->update(['description' => 'new desccription']);
}
不要忘记将description
添加到$fillable
数组。
如果由于某种原因您确实想使用save()
而不是update()
,则可以使用chunk()
方法加载数据。
使用chunk方法将在处理大型结果集时节省内存
答案 1 :(得分:0)
您可以使用update()
函数将单个查询中的多行更新为:
Item::where('description', '=', '')
->update(['description' => 'new description']);
答案 2 :(得分:-1)
不确定这是否有帮助,但我有完全相同的问题...这是因为模型I被称为"保存"没有主键。