Delete Records Query Builder Laravel 8

Chúng ta đã lần lượt học cách sử dụng Query Builder Laravel 8 để chèn dữ liệu, xem dữ liệu, update dữ liệu vào bảng rồi phải không nào. Trong bài này chúng ta học bài cuối cùng là xóa bản ghi nhé các bạn. Chúng ta vẫn sử dụng database từ bài cũ, các control, view nữa đấy. Nếu chưa tạo bạn có thể back lại vài bài nhé!

Xác định mục đích

Trong bài trước khi truy cập vào  http://localhost:8000/user/view chúng ta view được bảng dữ liệu user như sau

Mục tiêu của chúng ta bây giờ là nhấn vào nút Delete của ID nào thì sẽ xóa dữ liệu của ID đó đi

Công tác chuẩn bị

Việc chúng ta cần làm là nhận diện dữ liệu cần xóa thông qua id, sau đó tiến hành xử lý xóa dữ liệu, muốn vậy chúng ta cần 

  • Thêm liên kết sao cho click vào sẽ gửi id tới trang xử lý xóa dữ liệu.
  • Viết Controller điều khiển việc xóa dữ liệu.
  • Cuối cùng là tạo một Route điều hướng dữ liệu từ Controller sang view.

Thêm liên kết xóa dữ liệu cho /resources/views/user/view.blade.php

Trong bài trước chúng ta đã tạo sẵn được trang xem dữ liệu bây giờ chúng ta chỉ cần thêm liên kết để xóa dữ liệu vào trang là đã có trang xóa dữ liệu trực quan. 

Chúng ta cần truyền ID vào liên kết để nhận dạng dữ liệu cần xóa, liên kết này ta viết dạng form submit dữ liệu, action điều hướng tới Controller xử lý dữ liệu, phương thức được sử dụng là DELETE, ta viết như sau:

<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>           
        </tr>
    </thead>
    <tbody>
        @foreach($users as $row)
        <tr>
            <td>{{$row->id}}</td>
            <td>{{$row->name}}</td>
            <td>{{$row->email}}</td>
              <td><a href="/user/view/edit/{{$row->id}}">Edit</a><br>
                <form method="POST" action="/user/view/delete/{{$row->id}}" onsubmit="return ConfirmDelete( this )">
                    @method('DELETE')
                    @csrf
                    <button type="submit">Delete</button>
                </form>
            </td>
        </tr>
        @endforeach
    </tbody>
</table>

Trong đó :

  • onsubmit="return ConfirmDelete( this )": khai báo javascript trả về hàm ConfirmDelete để xuất thông báo thành công hoặc lỗi.
  • @method('DELETE'): gọi form với phương thức delete.
  • @csrf: tạo một chuỗi CSRF ngẫu nhiên, thuộc tính cần được sử dụng thường cho form.

Chạy lại đường dẫn http://localhost:8000/user/view trên trình duyệt, ta sẽ nhận được kết quả sau:

Thiết lập để xóa dữ liệu trong database Laravel

Thêm nội dung Controller

 /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        DB::delete('delete from users where id = ?',[$id]);
        return Redirect::action([User_Controller::class, 'index']);
    }

Thêm nội dung Route

Ta thêm vào Route /routes/web.php nội dung sau:

Route::DELETE('/user/view/delete/{id}', [User_Controller::class,'destroy']);

Thực hiện xóa dữ liệu

Chúng ta truy cập lại trang http://localhost:8000/user/view sau đó nhấn thử Delete để xóa dữ liệu của ID bất kỳ. Ví dụ ở đây chúng tôi xóa ID 4

Kết quả thành công ID 4 đã không còn

Lời kết:

Vậy là chúng ta đã hoàn thiện bài cuối cùng Delete Records bằng Query Builder Laravel 8 rồi đấy.  Đơn giản chúng ta chỉ cần lấy được ID cần xóa sau đó sử dụng controller để xóa là được. Có đoạn nào chưa hiểu các bạn hãy comment bên dưới nhé. Chúc các bạn học tốt!

Bình luận