查看: 2178|回复: 0

[PHP代码] laravel and lumen 软删除操作

发表于 2018-1-3 08:00:00

知识都是有联系的,这绝对是真理。作为一名小白,看了一点官方文档,把我自己理解的软删除操作给大家讲讲。有些就是套用官方文档的话。

定义:什么是软删除呢,所谓软删除指的是数据表记录并未真的从数据库删除,而是将表记录的标识状态标记为软删除,这样在查询的时候就可以加以过滤,让对应表记录看上去是被”删除“了。

通俗易懂说法:数据库的表中使用了一个日期字段作为标识状态,这个日期字段可以自定义,这里我们使用deleted_at,如果对应模型被软删除,则该条记录的deleted_at字段的值为删除时间,否则该值为空。

开始操作:

我选择使用laravel 做示例,因为lumen的artisan命令太少。主要是原理!!!

添加model文件,并创建blog_users表.

运行如下命令:

  1. php artisan make:model blogUser --migration
复制代码

  

现在,已经生成了model文件,还有迁移文件。

我们用命令生成数据表,如下:

  1. php artisan migrate
复制代码

  

现在还差一个字段,就是deleted_at字段。继续命令,

  1. php artisan make:migration alter_posts_deleted_at --table=blog_users
复制代码

然后编辑生成的PHP文件如下:

  1. <?php
  2. use Illuminate\Support\Facades\Schema;
  3. use Illuminate\Database\Schema\Blueprint;
  4. use Illuminate\Database\Migrations\Migration;
  5. class AlterPostsDeletedAt extends Migration
  6. {
  7. /**
  8. * Run the migrations.
  9. *
  10. * @return void
  11. */
  12. public function up()
  13. {
  14. Schema::table('blog_users', function (Blueprint $table) {
  15. //我新加部分如下一行
  16. $table->softDeletes();
  17. });
  18. }
  19. /**
  20. * Reverse the migrations.
  21. *
  22. * @return void
  23. */
  24. public function down()
  25. {
  26. Schema::table('blog_users', function (Blueprint $table) {
  27. //
  28. });
  29. }
  30. }
复制代码

记得在migrations 文件夹中,把生成表的那个文件删掉,在继续执行如下命令,

  1. php artisan migrate
复制代码

  

你看deleted_at字段出来了吧。

好了,我要写代码了,不命令行了,哈哈哈。

在blogUser文件中,引用软删除,并配置。
  1. <?php
  2. namespace App;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Database\Eloquent\SoftDeletes;
  5. class blogUser extends Model
  6. {
  7. //使用软删除
  8. use SoftDeletes;
  9. //设置表名
  10. public $table = 'blog_users';
  11. //设置主键
  12. public $primaryKey = 'id';<br>
  13. protected $dates = ['deleted_at'];
  14. }
复制代码

 现在,我们去控制器中吧,看看软删除好了没。 

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\blogUser;
  4. class BlogUsedController extends Controller
  5. {
  6. public function softdel(){
  7. $post = blogUser::find(1);
  8. $post->delete();
  9. if($post->trashed()){
  10. echo '软删除成功!';
  11. dd($post);
  12. }else{
  13. echo '软删除失败!';
  14. }
  15. }
  16. }
复制代码

  执行结果:

lumen 也是这个原理,到时候,你数据表就手动创建,别用命令生成。model代码与控制器代码是主要的。

结束了,大功告成,如有不理解地方,请评论留言。



回复

使用道具 举报