刪除
你可以在將資料寫入資料庫後刪除資料。如果已檢索模型例項,則可以刪除模型例項,也可以指定要刪除的記錄的條件。
要刪除模型例項,請檢索它並呼叫 delete()
方法:
$user = User::find(1);
$user->delete();
或者,你可以通過 destroy()
方法指定要刪除的記錄的主鍵(或主鍵陣列):
User::destroy(1);
User::destroy([1, 2, 3]);
你還可以將查詢與刪除相結合:
User::where('age', '<', 21)->delete();
這將刪除符合條件的所有使用者。
注意:通過 Eloquent 執行批量刪除語句時,不會為已刪除的模型觸發
deleting
和deleted
模型事件。這是因為在執行 delete 語句時從不實際檢索模型。
軟刪除
有時你不希望永久刪除記錄,而是將其保留用於審計或報告目的。為此,Eloquent 提供軟刪除功能。
要向模型新增軟刪除功能,你需要匯入 SoftDeletes
特徵並將其新增到你的 Eloquent 模型類:
namespace Illuminate\Database\Eloquent\Model;
namespace Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
刪除模型時,它會在模型表中的 deleted_at
時間戳列上設定時間戳,因此請務必先在表格中建立 deleted_at
列。或者在遷移中,你應該在藍圖上呼叫 softDeletes()
方法來新增 deleted_at
時間戳。例:
Schema::table('users', function ($table) {
$table->softDeletes();
});
任何查詢都將省略軟刪除的記錄。如果你願意,可以使用 withTrashed()
示波器強制顯示它們:
User::withTrashed()->get();
如果你希望允許使用者在軟刪除後恢復記錄(即在垃圾桶型別區域中),那麼你可以使用 restore()
方法:
$user = User::find(1);
$user->delete();
$user->restore();
要強制刪除記錄,請使用 forceDelete()
方法,該方法將從資料庫中真正刪除記錄:
$user = User::find(1);
$user->forceDelete();