知識都是有聯系的,這絕對是真理。作為一名小白,看了一點官方文檔,把我自己理解的軟刪除操作給大家講講。有些就是套用官方文檔的話。
定義:什么是軟刪除呢,所謂軟刪除指的是數據表記錄並未真的從數據庫刪除,而是將表記錄的標識狀態標記為軟刪除,這樣在查詢的時候就可以加以過濾,讓對應表記錄看上去是被”刪除“了。
通俗易懂說法:數據庫的表中,使用了一個日期字段作為標識狀態,這個日期字段可以自定義,這里我們使用deleted_at,如果對應模型被軟刪除,則該條記錄的deleted_at字段的值為刪除時間,否則該值為空。
開始操作:
我選擇使用laravel 做示例,因為lumen的artisan命令太少。主要是原理!!!
添加model文件,並創建blog_users表.
運行如下命令:
php artisan make:model blogUser --migration

現在,已經生成了model文件,還有遷移文件。
我們用命令生成數據表,如下:
php artisan migrate

現在還差一個字段,就是deleted_at字段。繼續命令,
php artisan make:migration alter_posts_deleted_at --table=blog_users

然后編輯生成的PHP文件如下:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterPostsDeletedAt extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('blog_users', function (Blueprint $table) {
//我新加部分如下一行
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('blog_users', function (Blueprint $table) {
//
});
}
}
記得在migrations 文件夾中,把生成表的那個文件刪掉,在繼續執行如下命令,
php artisan migrate

你看deleted_at字段出來了吧。
好了,我要寫代碼了,不命令行了,哈哈哈。
在blogUser文件中,引用軟刪除,並配置。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class blogUser extends Model
{
//使用軟刪除
use SoftDeletes;
//設置表名
public $table = 'blog_users';
//設置主鍵
public $primaryKey = 'id';
protected $dates = ['deleted_at'];
}
現在,我們去控制器中吧,看看軟刪除好了沒。
<?php
namespace App\Http\Controllers;
use App\blogUser;
class BlogUsedController extends Controller
{
public function softdel(){
$post = blogUser::find(1);
$post->delete();
if($post->trashed()){
echo '軟刪除成功!';
dd($post);
}else{
echo '軟刪除失敗!';
}
}
}
執行結果:

lumen 也是這個原理,到時候,你數據表就手動創建,別用命令生成。model代碼與控制器代碼是主要的。
結束了,大功告成,如有不理解地方,請評論留言。
