Query Builder Laravel 8 tương tự như Query Builde trong các phiên bản cũ cung cấp khả năng tạo và chạy những truy vấn từ database một cách nhanh chóng. Đồng thời Query Builder Laravel 8 cũng sử dụng liên kết tham số PDO để bảo vệ ứng dụng của bạn chống lại các cuộc tấn SQL injection. Trong bài này chúng ta sẽ nhắc lại cách sử dụng Query Builder trong Laravel 8 còn cách sử dụng chi tiết hơn mời các bạn theo dõi lại phần Laravel trước nhé.
I. Cú pháp Query Builder Laravel 8
Query Builder Laravel 8 cũng sử dụng phương thức DB facade để thực hiện các truy vấn.
1. Lấy tất cả dữ liệu trong bảng.
DB::table('tablename')->get()
Với tablenam là tên bảng muốn lấy dữ liệu
VD: Lấy tất cả dữ liệu trong bảng users
Route::get('laydulieu', function () {
$data = DB::table('users')->get();
print_r($data);
});
Kết quả:
Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [id] => 1 [name] => phamnhantutien [email] => phamnhantutien@gmail.com [email_verified_at] => [password] => $2y$10$fi.s2w0MDqn3kewGuZScQ.v7lMhBm0LNuuvXrL6eyOxfr4jPa6vqW [two_factor_secret] => [two_factor_recovery_codes] => [remember_token] => h0ohCpAiJpqS1ZFke0Qevjt3hrKrVhNs7BJdt2hXnFZM9mlYGsJ8Qkvft4Cp [created_at] => 2021-01-21 07:11:01 [updated_at] => 2021-01-21 07:13:47 ) ) )
Ví Dụ 2 Lấy dữ liệu bên sử dụng Controller và hiển thị ở View
Tạo controller mới UserController
php artisan make:controller UserController
với nội dung như sau
app/Http/Controllers/UserController.php
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; class UserController extends Controller { /** * Show a list of all of the application's users. * * @return \Illuminate\Http\Response */ public function index() { $users = DB::table('users')->get(); return view('user.index', ['users' => $users]); } }
Tạo mới view index.blade.php trong resources/views/user/
resources/views/user/index.blade.php
<html> <head> <title>View User Records</title> </head> <body> <table border = 1> <tr> <td>ID</td> <td>Name</td> <td>Email</td> </tr> @foreach ($users as $user) <tr> <td>{{ $user->id}}</td> <td>{{ $user->name}}</td> <td>{{ $user->mail}}</td> </tr> @endforeach </table> </body> </html>
Khai báo lại route
routes/web.php
use App\Http\Controllers\Usercontroller; Route::get('/xemuser',[Usercontroller::class, 'index']);
Xem kết quả:
2. Select cột trong bảng.
Cú pháp:
DB::table('tablename')->select('cột 1', 'cột 2')->get();
Để truy xuất một hàng theo giá trị cột id của nó, hãy sử dụng phương thức find:
$user = DB::table('users')->find(3);
3. Select có điều kiện.
Điều kiện bằng:
DB::table('tablename')->where('column', 'filter')->get();
Điều kiện lớn hơn:
DB::table('tablename')->where('column', '>', 'filter')->get();
Điều kiện nhỏ hơn:
DB::table('tablename')->where('column', 'get();
Điều kiện khác:
DB::table('tablename')->where('column', '<>', 'filter')->get();
Điều kiện lồng:
users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();
4. Truy vấn tìm kiếm.
DB::table('tablename')->where('column', 'like', 'filter')->get();
Ví dụ: DB::table('product')->where('name', 'like', '%Sách%')->get();
5. Join bảng.
$users = DB::table('users')->join('contacts', 'users.id', '=', 'contacts.user_id')->get();
Left join:
$users = DB::table('users')->leftjoin('contacts', 'users.id', '=', 'contacts.user_id')->get();
6. OrderBy.
$users = DB::table('users') ->orderBy('name', 'desc') ->get();
7. Random.
$randomUser = DB::table('users') ->inRandomOrder() ->first();
8. GroupBy/having.
$users = DB::table('users') ->groupBy('account_id') ->having('account_id', '>', 100) ->get();
9. Thêm (insert).
DB::table('users')->insert( ['email' => 'john@example.com', 'votes' => 0] );
10. Sửa (update).
DB::table('users') ->where('id', 1) ->update(['votes' => 1]);
11. Xóa (delete).
DB::table('users')->delete(); //hoặc DB::table('users')->where('votes', '>', 100)->delete();
III. Lời kết:
Các Query Builder trong Laravel 8 thường dùng đều được liệt kê ở trên. Khi sử dụng bạn cần nhớ luôn khai báo câu lệnh sau khi sử dụng Query Builder trong Controller nhé: use Illuminate\Support\Facades\DBcontrollers .