Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 5 无法使用查询生成器软删除多行_Laravel 5 - Fatal编程技术网

Laravel 5 无法使用查询生成器软删除多行

Laravel 5 无法使用查询生成器软删除多行,laravel-5,Laravel 5,我的模型是这样的: namespace App; use Illuminate\Database\Eloquent\SoftDeletes; class Photo extends Model { use SoftDeletes; protected $dates = ['deleted_at']; } _我可以使用以下软件进行软删除: $\App\Photo::find(1)->delete(); _当我尝试对多行使用软删除时,它不起作用: \App\Photo::

我的模型是这样的:

namespace App;
use Illuminate\Database\Eloquent\SoftDeletes;

class Photo extends Model {
    use SoftDeletes;
    protected $dates = ['deleted_at'];
}
_我可以使用以下软件进行软删除:

$\App\Photo::find(1)->delete();
_当我尝试对多行使用软删除时,它不起作用:

\App\Photo::whereIn('id', [1,2,3])->delete();

有人知道为什么吗?

软删除功能只适用于雄辩模型本身的实例。进行此操作时:

\App\Photo::find(1)->delete();
实际上,您首先从数据库中检索ID为1的照片,然后准备该照片,并将其作为Elount模型的实例提供,然后可以使用soft delete

但是,执行此操作时:

\App\Photo::whereIn('id', [1,2,3])->delete();
实际上,您并没有从数据库中检索任何内容,您基本上只是以一种更方便的方式准备deletesql。这有效地运行了如下内容:

DELETE FROM `photos` WHERE `id` IN (1,2,3);
foreach (\App\Photo::whereIn('id', [1,2,3])->get() as $photo) {

    $photo->delete();  # $photo is an eloquent model and can soft-delete

}
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 1;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 2;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 3;
这与以下情况不同:

DELETE FROM `photos` WHERE `id` IN (1,2,3);
foreach (\App\Photo::whereIn('id', [1,2,3])->get() as $photo) {

    $photo->delete();  # $photo is an eloquent model and can soft-delete

}
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 1;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 2;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 3;
请注意->get,它实际上首先从数据库中获取数据,并将其作为一组有说服力的模型提供,然后可以进行软删除

我认为你不能软删除一批。在我使用->get的foreach示例中,我设想执行多个查询-类似于:

DELETE FROM `photos` WHERE `id` IN (1,2,3);
foreach (\App\Photo::whereIn('id', [1,2,3])->get() as $photo) {

    $photo->delete();  # $photo is an eloquent model and can soft-delete

}
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 1;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 2;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 3;

希望这是有意义的。

软删除功能只适用于雄辩模型本身的实例。进行此操作时:

\App\Photo::find(1)->delete();
实际上,您首先从数据库中检索ID为1的照片,然后准备该照片,并将其作为Elount模型的实例提供,然后可以使用soft delete

但是,执行此操作时:

\App\Photo::whereIn('id', [1,2,3])->delete();
实际上,您并没有从数据库中检索任何内容,您基本上只是以一种更方便的方式准备deletesql。这有效地运行了如下内容:

DELETE FROM `photos` WHERE `id` IN (1,2,3);
foreach (\App\Photo::whereIn('id', [1,2,3])->get() as $photo) {

    $photo->delete();  # $photo is an eloquent model and can soft-delete

}
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 1;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 2;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 3;
这与以下情况不同:

DELETE FROM `photos` WHERE `id` IN (1,2,3);
foreach (\App\Photo::whereIn('id', [1,2,3])->get() as $photo) {

    $photo->delete();  # $photo is an eloquent model and can soft-delete

}
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 1;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 2;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 3;
请注意->get,它实际上首先从数据库中获取数据,并将其作为一组有说服力的模型提供,然后可以进行软删除

我认为你不能软删除一批。在我使用->get的foreach示例中,我设想执行多个查询-类似于:

DELETE FROM `photos` WHERE `id` IN (1,2,3);
foreach (\App\Photo::whereIn('id', [1,2,3])->get() as $photo) {

    $photo->delete();  # $photo is an eloquent model and can soft-delete

}
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 1;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 2;
UPDATE `photos` SET `deleted_at` = NOW() WHERE `id` = 3;
希望这是有意义的。

也尝试一下:

\App\Photo::whereIn('id', [1,2,3])
    ->get()
    ->map(function($photo) {
        $photo->delete();
    });
也可以尝试以下方法:

\App\Photo::whereIn('id', [1,2,3])
    ->get()
    ->map(function($photo) {
        $photo->delete();
    });

不,不能软删除多行。 在这种情况下,唯一的Laravel方法是DB facade。 下面是我如何软删除多行

DB::table'table_name'->其中'id',[id数组] ->更新[ '在'=>碳::现在->格式'Y-m-d H:i:s'处删除'U' ];

这也是一个非常有效的解决方案,而不是对循环中的每个模型运行软删除,如果数组中的项太多,则会导致系统崩溃。
希望这有帮助。

不,您不能软删除多行。 在这种情况下,唯一的Laravel方法是DB facade。 下面是我如何软删除多行

DB::table'table_name'->其中'id',[id数组] ->更新[ '在'=>碳::现在->格式'Y-m-d H:i:s'处删除'U' ];

这也是一个非常有效的解决方案,而不是对循环中的每个模型运行软删除,如果数组中的项太多,则会导致系统崩溃。
希望这有帮助。

谢谢您的回答。我还发现我的启动函数缺少parent::boot;在我的情况下,这导致我的代码不工作。谢谢你的回答。我还发现我的启动函数缺少parent::boot;在我的例子中,这会导致我的代码不起作用。这应该在Laravel5.6中起作用。这应该在laravel 5.6中起作用。我遵循这一点,但它不能垃圾多行选择,它只删除一行,但当我再次加载页面时,我删除的所有数据行再次出现。为什么?如果您使用模型获取数据,请确保已在模型中添加了softDeletes特性。如果使用DB facade获取数据,请确保添加过滤器whereNotNull'deleted_at',我遵循此操作,但它不能丢弃多个选定行,它只删除一行,但当我再次加载页面时,我删除的所有数据行都会再次出现。为什么?如果您使用模型获取数据,请确保已在模型中添加了softDeletes特性。如果使用DB facade获取数据,请确保添加过滤器whereNotNull'deleted\u at'