Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 模型更新导致内存不足_Laravel_Eloquent_Laravel 5.3 - Fatal编程技术网

Laravel 模型更新导致内存不足

Laravel 模型更新导致内存不足,laravel,eloquent,laravel-5.3,Laravel,Eloquent,Laravel 5.3,我试图用新的描述更新我的项目模型,但是当执行ConsoleCommand时,它会抛出内存不足的错误。如果我创建了一个新的项目模型,就没有问题了。我怀疑它试图更新所有记录,而不是我指出的项目 $items = Item::query()->where('description', '=', '')->get(); foreach ($items as $item) { if ($item->exists()) { $item->description

我试图用新的描述更新我的项目模型,但是当执行ConsoleCommand时,它会抛出内存不足的错误。如果我创建了一个新的项目模型,就没有问题了。我怀疑它试图更新所有记录,而不是我指出的项目

$items = Item::query()->where('description', '=', '')->get();
foreach ($items as $item) {
    if ($item->exists()) {
        $item->description = "new description";
        $item->save();
   }
}
PHP致命错误:第2710行的..\vendor\illumb\support\Str.PHP中允许的内存大小为134217728字节(尝试分配65488字节)

count($items) = 3255
count($item) = 1

$items->count() = 3255
$item->count() = 3255
PHP致命错误:第2710行的..\vendor\illumb\support\Str.PHP中允许的内存大小为134217728字节(尝试分配65488字节)

count($items) = 3255
count($item) = 1

$items->count() = 3255
$item->count() = 3255
EDIT1:
这个问题集中在为什么$item->save()的调用会导致内存不足。仅尝试保存/更新一个模型时

EDIT2:
为什么下面的代码仍然会抛出内存不足

$item = Item::where('description', '=', '')->first();
$item->description = "new description";
$item->save();
但当使用以下命令而不是->save()时,则不会:


您正在查询所有项目,因此会出现错误。这就像将表中的所有数据复制到内存中一样。如果每行中的描述不同,请尝试使用
update()
方法逐个更新行:

foreach ($data as $row) {
    Item::where('description', 'old description')
        ->update(['description' => 'new desccription']);
}
不要忘记向数组中添加
description

如果出于某种原因确实希望使用
save()
而不是
update()
,则可以使用方法加载数据

在处理大型结果集时,使用chunk方法将节省内存


您正在查询所有项目,因此会出现错误。这就像将表中的所有数据复制到内存中一样。如果每行中的描述不同,请尝试使用
update()
方法逐个更新行:

foreach ($data as $row) {
    Item::where('description', 'old description')
        ->update(['description' => 'new desccription']);
}
不要忘记向数组中添加
description

如果出于某种原因确实希望使用
save()
而不是
update()
,则可以使用方法加载数据

在处理大型结果集时,使用chunk方法将节省内存

您可以使用
update()
函数在单个查询中更新多行,如下所示:

Item::where('description', '=', '')
    ->update(['description' => 'new description']);
您可以使用
update()
函数在单个查询中更新多行,如下所示:

Item::where('description', '=', '')
    ->update(['description' => 'new description']);

不确定这是否有帮助,但我有完全相同的问题。。。这是因为我使用的名为“save”的型号没有主键。

不确定这是否有帮助,但我遇到了完全相同的问题。。。这是因为我在其上被称为“save”的型号没有主键。

如果没有save功能,console命令不会抱怨内存不足。此外,我要求该项从其他地方检索描述,因此如果我使用查询生成器直接更新,我将失去这样做的可能性。@user2803086,那么您的查询将占用大量内存,但不是全部。无论如何,你应该改变方法。我同意,但我不想失去太多的ORM功能。这似乎是一种奇怪的行为,为什么save()可能试图保存所有的$items,而不是我调用它的某个$items。@user2803086,如果出于某种原因您确实想使用
save()
而不是
update()
,您可以这样做。但是您应该逐行获取数据。它将使查询数量增加一倍,但它比当前的方法要好得多。如果行太多,可以使用
chunk()
方法加载数据:谢谢,但更多的是了解save()方法。正如您在EDIT2中看到的那样。我假设只更新这个项目,但是仍然会抛出内存不足,为什么,会发生什么?如果没有save函数,console命令不会抱怨内存不足。此外,我要求该项从其他地方检索描述,因此如果我使用查询生成器直接更新,我将失去这样做的可能性。@user2803086,那么您的查询将占用大量内存,但不是全部。无论如何,你应该改变方法。我同意,但我不想失去太多的ORM功能。这似乎是一种奇怪的行为,为什么save()可能试图保存所有的$items,而不是我调用它的某个$items。@user2803086,如果出于某种原因您确实想使用
save()
而不是
update()
,您可以这样做。但是您应该逐行获取数据。它将使查询数量增加一倍,但它比当前的方法要好得多。如果行太多,可以使用
chunk()
方法加载数据:谢谢,但更多的是了解save()方法。正如您在EDIT2中看到的那样。我假设只更新此项,但仍会抛出内存不足,为什么,会发生什么?如果出现潜在的其他问题,您应该包括您的
模型类如果出现潜在的其他问题,您应该包括
模型类