LaravelVietnam / laravel-solutions

A Q&A board for helping members
27 stars 4 forks source link

[Laravel 4.x 5.x] Tính năng xóa dữ liệu tạm thời #21

Open tonamson opened 8 years ago

tonamson commented 8 years ago

Link tham khảo: https://laravel.com/docs/5.2/eloquent#soft-deleting

Link blog của mình nếu mình không có cập nhật trên mấy github: https://tns93.wordpress.com/

Bạn có bao giờ nghỉ rằng mình chỉ muốn xóa dữ liệu tạm thời thôi không muốn nó xóa đi mất và dữ liệu bị xóa tạm thời ấy có thể khôi phục lại khi bạn cần?

Sau đây là cách hiệu quả nhất trong thư viện có sẵn trong Laravel 5.2

Sau đây em sẽ làm một cái Tutorial nho nhỏ về sử dụng:

Khai báo sử dụng thư viện trong Model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Flight extends Model
{
    use SoftDeletes;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = ['deleted_at'];
}

Để tự động tạo cột deleted_at theo đúng cấu trúc của Laravel thì ở trong Migration của mình phải thêm dòng như sau

Schema::table('flights', function ($table) {
    $table->softDeletes();
});

Sau khi đã làm hoàn tất các bước trên thì ở đây để thực thi xóa một ID nào đó như sau

Ảnh dữ liệu trước khi xóa: capture


//Cách 1:
Product::where('id', 1)->trashed();

//Cách 2:
Product::where('id', 1)->delete();

//Cách 3:
//Tự nghĩ nhé :D

Như vậy đã thực hiện xong việc xóa dữ liệu

Ảnh dữ liệu sau khi xóa: capture

_Ảnh mình chạy code khúc đầu xuất mảng Array khi dữ liệu chưa xóa và sau khi xóa thì tìm lại id đó thì nó không hiển thị nữa :dancer: _ capture

Ngoài ra để phục hồi thì bạn nên đọc bài hướng dẫn của Laravel 5.2 theo link trên nhé mình chỉ giúp tới đây thôi vì thấy tính năng này cũng hay muốn chia sẽ :)

_Ngồi nghịch thêm một số thứ của Laravel: _

Product::onlyTrashed()->where('id', 1)->get()->toArray()

capture

Lấy dữ liệu vừa bị xóa xuất ra xem

Restore lại dữ liệu:

Product::where('id', 1)->restore()

Ảnh sau restore capture

pvhau commented 8 years ago

@tonamson $model->trashed() hình như chỉ có chức năng kiểm tra xem instance đấy đã soft deleted chưa thôi chứ không có chức năng xóa thì phải

tonamson commented 8 years ago

@pvhau nó check xóa đó bác em dùng rồi :+1: Mấy cái nào trên đây em post là em test kỹ lắm mới dám share :dancer:

pvhau commented 8 years ago

@tonamson chuẩn rồi. Ý mình là nó không phải 1 cách thực hiện soft delete như ở trên nêu ấy :)

tonamson commented 8 years ago

@pvhau vẫn chưa hiểu lắm :3

phumaster commented 8 years ago

cảm ơn bạn! Tut rất hay :)

phumaster commented 8 years ago

à cho mình hỏi mình muốn xóa vĩnh viễn thì sao nhỉ?

tonamson commented 8 years ago

bạn vào coi document nhé đã có luôn rồi đọc kỹ chút sẽ thấy

huy23121994 commented 8 years ago

ko biết xóa tạm thời thì những dữ liệu bị xóa tạm thời sẽ lưu vào đâu nhỉ

tonamson commented 8 years ago

@huy23121994 bạn để ý nó có đòng softDelete nó sẽ tạo cột deleted_at nó sẽ đánh dấu thời gian xóa nếu nó = null thì không xóa nếu != null thì nó đã được đánh dấu xóa tạm thời