laravel 软删除和恢复删除用户

ゞ 浴缸里的玫瑰 2023-10-06 18:11 109阅读 0赞

laravel软删除和恢复删除用户

  • 1 模型中指定软删除的标识字段
    • 添加代码
      • 文件
    • 2 添加路由
    • 3 应用方式
  • 用 Laravel 自带的 Eloquent ORM 来实现软删除
    • 生成表结构

1 模型中指定软删除的标识字段

添加代码

  1. use Illuminate\Database\Eloquent\SoftDeletes;
  2. // 调用定义的trait类 和 继承效果一样
  3. use SoftDeletes;
  4. // 软删除标识字段
  5. protected $dates = ['deleted_at'];

文件

  1. <?php
  2. namespace App;
  3. use Illuminate\Contracts\Auth\MustVerifyEmail;
  4. use Illuminate\Database\Eloquent\SoftDeletes;
  5. use Illuminate\Foundation\Auth\User as Authenticatable;
  6. use Illuminate\Notifications\Notifiable;
  7. class User extends Authenticatable
  8. {
  9. use Notifiable;
  10. // 调用定义的trait类 和 继承效果一样
  11. use SoftDeletes;
  12. // 软删除标识字段
  13. protected $dates = ['deleted_at'];
  14. /**
  15. * The attributes that are mass assignable.
  16. *
  17. * @var array
  18. */
  19. protected $fillable = [
  20. 'name', 'email', 'password',
  21. ];
  22. /**
  23. * The attributes that should be hidden for arrays.
  24. *
  25. * @var array
  26. */
  27. protected $hidden = [
  28. 'password', 'remember_token',
  29. ];
  30. /**
  31. * The attributes that should be cast to native types.
  32. *
  33. * @var array
  34. */
  35. protected $casts = [
  36. 'email_verified_at' => 'datetime',
  37. ];
  38. }

2 添加路由

  1. Route::get('softDeletes', 'JuneController@softDeletes');

在这里插入图片描述

3 应用方式

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\User;
  4. use Illuminate\Http\Request;
  5. class JuneController extends Controller
  6. {
  7. public function softDeletes()
  8. {
  9. $user = User::find(request('id'));
  10. // 软删除
  11. // User::find(request('id'))->delete();
  12. // 强制删除 在配置了软删除的时候,真实的删除操作
  13. // User::find($id) -> forceDelete();
  14. # withTrashed()显示所有的,包括已经进行了软删除的
  15. // $user = User::withTrashed()->get();
  16. // 还原
  17. // $user = User::onlyTrashed()->where('id', request('id'))->restore();
  18. return $user;
  19. }
  20. }

用 Laravel 自带的 Eloquent ORM 来实现软删除

首先在数据迁移文件中添加删除时间字段

D:\PHPstudyWWW\dcatAdmin\database\migrations\2022_04_06_084934_create_table_users.php

  1. <?php
  2. use Illuminate\Support\Facades\Schema;
  3. use Illuminate\Database\Schema\Blueprint;
  4. use Illuminate\Database\Migrations\Migration;
  5. class CreateTableUsers extends Migration
  6. {
  7. # 用户表
  8. public function up()
  9. {
  10. Schema::create('users', function (Blueprint $table) {
  11. $table->bigIncrements('id');
  12. // 角色
  13. $table->unsignedInteger('role_id')->default(0)->comment('角色ID');
  14. $table->string('username', 50)->comment("账号");
  15. $table->string('truename', 20)->default('未知')->comment("账号");
  16. $table->string('password', 255)->comment('密码');
  17. $table->timestamp('email_verified_at')->nullable();
  18. $table->rememberToken();
  19. $table->string('email', 50)->nullable()->comment('邮箱');
  20. $table->string('phone', 15)->default('')->comment('手机号码');
  21. $table->enum('sex', ['先生','女士'])->default('先生')->comment('性别');
  22. $table->char('last_ip', 15)->default('')->comment('登录IP');
  23. $table->timestamps();
  24. // 实现软删除,需要添加delete_at字段,$table->softDeletes();
  25. $table->softDeletes();
  26. });
  27. }
  28. /**
  29. * Reverse the migrations.
  30. *
  31. * @return void
  32. */
  33. public function down()
  34. {
  35. Schema::dropIfExists('users');
  36. }
  37. }

生成表结构

  1. PS D:\PHPstudyWWW\dcatAdmin> php artisan migrate --path=/database/migrations/2022_04_06_084934_create_table_users.php
  2. Nothing to migrate.
  3. PS D:\PHPstudyWWW\dcatAdmin>

laravel 执行 PHP migrate 报 Nothing to migrate.

laravel 会在你的数据库里面生成一个 migrations 表,这个表记录了你的 migrate 操作,当我们进行一些操作,比如手动删除表的时候,migrations 表里面的记录没有删除,手动删除,重新执行 php artisan migrate 命令就可以了。

  1. PS D:\Centos\PHPstudyWWW\dcatAdmin> php artisan migrate --path=/database/migrations/2022_04_06_084934_create_table_users.php
  2. Migrating: 2022_04_06_084934_create_table_users
  3. Migrated: 2022_04_06_084934_create_table_users (0.08 seconds)
  4. PS D:\Centos\PHPstudyWWW\dcatAdmin>
  5. CREATE TABLE `users` (
  6. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  7. `role_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '角色ID',
  8. `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号',
  9. `truename` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '未知' COMMENT '账号',
  10. `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码',
  11. `email_verified_at` timestamp NULL DEFAULT NULL,
  12. `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  13. `email` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
  14. `phone` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '手机号码',
  15. `sex` enum('先生','女士') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '先生' COMMENT '性别',
  16. `last_ip` char(15) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '登录IP',
  17. `created_at` timestamp NULL DEFAULT NULL,
  18. `updated_at` timestamp NULL DEFAULT NULL,
  19. `deleted_at` timestamp NULL DEFAULT NULL,
  20. PRIMARY KEY (`id`)
  21. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

发表评论

表情:
评论列表 (有 0 条评论,109人围观)

还没有评论,来说两句吧...

相关阅读

    相关 删除删除

    最近做项目时用到了软删除,实现的方法还是挺多的不局限于数据库加字段进行处理,在项目中,我就用到了对字段设置定值,查询的时候进行筛选展示,可以实现软删除。 硬删除

    相关 数据库删除

    数据库软删除 这是个问题 冷静分析 这是个问题 今天研究个博客项目的开源代码时,发现了一个奇怪的现象,就是发现它在数据库中查找的语句是下面这样

    相关 删除用户

    删除用户 若使用userdel haha 命令删除该用户时,并不能删除该用户的所有信息,只是删除了/etc/passwd、/etc/shadow、/etc/group/、/e

    相关 什么是删除

    软删除 使用Entrust提供的迁移命令生成的关联关系表中默认使用了onDelete(‘cascade’)以便父级记录被删除后移除其对应的关联关系。如果你由于某种原因不能在