返回 导航

其他

hangge.com

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

作者:hangge | 2019-05-28 08:10

一、直接删除

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 字段到数据库表,当模型使用软删除功能时会自动更新这个字段。

(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);

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

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 "被软删除了";
}
评论

全部评论(0)

回到顶部