Laravel - MySQL数据库的使用详解8(Eloquent ORM用法5:删除数据)

作者: hgphp 发布时间: 2019-09-11 浏览: 705 次 编辑

一、直接删除

1,通过模型对象删除

要删除一个模型,调用模型实例上的 delete 方法即可。

$user = User::find(6);
$user->delete();

2,通过查询删除模型

我们也可以通过查询来同时删除多个模型。

User::where('id', '>', 3)->delete();

3,通过主键删除模型

如果我们知道模型的主键的话,可以使用 destroy 方法直接删除,而不需先获取这个模型。

User::destroy(1);
User::destroy([1, 2, 3]);
User::destroy(1, 2, 3);

二、软删除

软删除: 当模型被软删除后,它们并没有真的从数据库删除,而是在模型上设置一个 deleted_at 属性并插入数据库。如果模型有一个非空 deleted_at 值,那么表示该模型已经被软删除了。


1,启用软删除功能

(1)要启用软删除功能,我们首先需要加入 deleted_at 字段到数据库表,当模型使用软删除功能时会自动更新这个字段。

原文:Laravel - MySQL数据库的使用详解8(Eloquent ORM用法5:删除数据)


(2)然后在模型类里加入 SoftDeletes 特性即可。

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
 
class User extends Model {
  use SoftDeletes;
   
  public $timestamps = false;
}

2,软删除测试 

(1)下面我们使用 delete 删除一个 id 为 3 的模型数据。

$user = User::find(3);
$user->delete();

2)删除后再次查询这条数据可以发现为 null,说明已经删除。

$user = User::find(3);
var_dump($user);

原文:Laravel - MySQL数据库的使用详解8(Eloquent ORM用法5:删除数据)


(3)打开数据库可以看到,这条数据其实还是存在的,只不过 deleted_at 字段更新了个删除时间。

原文:Laravel - MySQL数据库的使用详解8(Eloquent ORM用法5:删除数据)


3,查询被软删除的数据

(1)普通查询方法只能查询到 deleted_at 为 NULL 的数据,如果想让已被软删除的模型数据出现在查询结果里,在查询时使用 withTrashed 方法:

$users = User::withTrashed()
          ->where('id', '>', 1)
          ->get();

(2)如果想只查询被软删除的模型数据,可以使用 onlyTrashed 方法:

$users = User::onlyTrashed()
          ->where('id', '>', 1)
          ->get();


4,恢复被软删除的数据

(1)要把被软删除的模型数据恢复,使用 restore 方法。

$user->restore();

(2)也可以结合查询语句使用 restore 方法:

$users = User::withTrashed()
          ->where('id', '>', 1)
          ->restore();

5,彻底删除数据

如果想要真的从模型数据库删除,使用 forceDelete 方法。

$user = User::find(6);
$user->forceDelete();

6,判断数据是否被软删除

如果要确认模型是否被软删除了,可以使用 trashed 方法。

$user = User::withTrashed()->find(3);
if ($user->trashed()) {
   echo "被软删除了";
}


Laravel - MySQL数据库的使用详解系列:

1,Laravel - MySQL数据库的使用详解1(安装配置、基本用法)4,Laravel - MySQL数据库的使用详解4(Eloquent ORM用法1:创建模型)7,Laravel - MySQL数据库的使用详解7(Eloquent ORM用法4:插入、更新数据)
2,Laravel - MySQL数据库的使用详解2(Query Builder用法1:查询操作)5,Laravel - MySQL数据库的使用详解5(Eloquent ORM用法2:基本查询、动态范围)8,Laravel - MySQL数据库的使用详解8(Eloquent ORM用法5:删除数据)
3,Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)6,Laravel - MySQL数据库的使用详解6(Eloquent ORM用法3:模型关联、关联查询9,Laravel - MySQL数据库的使用详解9(Eloquent ORM用法6:事件、订阅、观察者)