Update Records Query Builder Laravel 8

Bài này chúng ta sẽ tiếp tục tìm hiểu về cách sử dụng Query Builder Laravel 8 để Update Records (update dữ liệu) trong database. Bài này có sử dụng các view, controller đã tạo sẵn từ các bài trước các bạn nhé.

1. Thêm liên kết để sửa dữ liệu vào trang view dữ liệu

Liên kết cần chứa id để có thể xem nội dung chi tiết của một dữ liệu cụ thể.

/resources/views/user/view.blade.php

<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> | Delete</td>
        </tr>
        @endforeach
    </tbody>
</table>

Reload lại trang http://localhost:8000/user/view ta sẽ nhận được kết quả sau:

2. Thêm nội dung Route

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

Route::get('/user/view/edit/{id}',[User_Controller::class, 'edit']);

Trong đó

  • /user/view/edit/{id}: đường dẫn trang cập nhật có chứa id.
  • User_Controller : Tên controller
  • edit: Đây là function edit($id) trong Controller User_Controller .

3. Thêm nội dung Controller

Thêm nội dung cho function show($id) của Controller AdminNewsController để gọi trang xem chi tiết một dữ liệu cụ thể khi người dùng click vào liên kết Edit:

/**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {       
        $users = DB::select('select * from users where id = ?',[$id]);
        return view('/user/user_update',['news'=>$users]);
    }

4. Tạo một trang view cập nhật chi tiết: /user/user_update

Khi click vào liên kết Edit, Route điều hướng tới Controller, đồng thời function edit($id) sẽ gọi dữ liệu và hiển thị nội dung trên trang cập nhật /user/user_update này. Ta tạo trang view user_update.blade.php đặt bên trong folder view /resource/views/user/ với nội dung sau:

@foreach($news as $user)
<form method="post" action="/user/view/update/{{ $user->id }}">
    @method('PATCH')
    @csrf
    <input type="hidden" name="id" value="{{ $user->id }}">
    <p>
        <label for="title">Name</label><br>
        <input type="text" name="name" value="{{ $user->name }}">
    </p>


    <p>
        <label for="email">Email</label><br>
        <input type="text" name="email" value="{{ $user->email }}">
    </p>   
 @endforeach

    <p>
        <button type="submit">Submit</button>
    </p>
</form>

Trong đó

  • action="/user/view/update/{{ $news->id }}": Khi nhấn submit, nội dung form sẽ được gửi tới /user/view/update/{{ $news->id }}, Route sẽ điều hướng đường dẫn này tới Controller xử lý tiếp.
  • value="{{ $news->id }}": giá trị này được ẩn, không được thay đổi, vì khi submit, dữ liệu sẽ được dựa theo id này mà cập nhật cho đúng mục cần thay đổi.

5. Hiển thị trang xem chi tiết dữ liệu:

Mở trang http://localhost:8000/user/view lên trình duyệt, click vào link Edit bất kỳ ta sẽ xem được kết quả sau:

6.Tiến hành thay đổi dữ liệu

Khi nhấn submit, nội dung form sẽ được gửi tới /user/view/update/{{ $news->id }}, do đó ta cần viết một Route để điều hướng tới Controller, cũng cần viết thêm một Controller để xử lý cập nhật dữ liệu mới vào database, ta lần lược viết như sau.

Thêm nội dung Route

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

Route::get('/user/view/edit/{id}',[User_Controller::class, 'edit']);
Route::PATCH('/user/view/update/{id}', [User_Controller::class, 'update']);

Thêm nội dung Controller

Thêm vào nội dung phần public function update(Request $request, $id) để khi controller được gọi hàm update  nó sẽ update dữ liệu vào database

<?php


namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;


class User_Controller extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
          $users = DB::select('select * from users');
          return view('user/view',['users'=>$users]);
    }


    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
         return view('/user/news_create');
    }


    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
         $name = $request->input('name');
         $email= $request->input('email');
         $password=$request->input('password');
         DB::table('users')->insert([
            'name' => $name,
            'email' => $email,
            'password' => $password,
        ]);
        return Redirect::action([User_Controller::class, 'create']);        
    }


    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }


    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $users = DB::select('select * from users where id = ?',[$id]);
        return view('/user/user_update',['news'=>$users]);
     
    }


    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
         $name = $request->input('name');
         $email= $request->input('email');    
         DB::update('update users set name = ? ,email = ? where id = ?',[$name,$email,$id]);
         return Redirect::action([User_Controller::class, 'index']);      
    }


    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}


Mở trang http://localhost:8000/user/view trình duyệt, click vào liên kết Edit bất kỳ, sau đó thay đổi nội dung và nhấn submit, ta sẽ xem được kết quả sau:

Ví Dụ chúng mình sửa user có ID bằng 3 thành HOCTV

Thành công

Lời kết:

Vậy là chúng ta đã biết cách Update Records bằng Query Builder Laravel 8 rồi đấy. Chúc các bạn thành công!

Bình luận