Bài 8: Query Builder trong Laravel 5.x

Admin
12-06-2017

Trước đây, khi bạn sử dụng PHP thuần làm việc, để truy vấn CSDL bạn cần viết hàm khá phức tạp, mỗi người 1 cách viết không theo quy chuẩn và thường dễ dàng bị SQL injection nếu bạn không thực sự hiểu về bảo mật trong truy vấn. 

Trong Laravel, Query Build cho phép ta thao tác với Cơ sở Dữ liệu 1 cách đơn giản và thuận tiện nhất. Nó được mọi người sử dụng rất nhiều truy xuất DB, và nó hoạt động trên tất cả hệ thống CSDL mà Laravel hỗ trợ (mysql, sqlite, pgsql ...)

Query Builder sử dụng kết nối PDO (PHP Data Object), bản thân API PDO đã bảo vệ bạn trước các tấn công SQL Injection, do đó khi xử dụng Query Builder bạn không cần lo lắng khi thao tác nhập xuất dữ liệu với DB

1. Cấu hình Database trong Laravel

Để bắt đầu Query builder các bạn cần phải cấu hình database kết nối đến cơ sở dữ liệu.

Laravel hỗ trợ bạn cấu hình dễ dàng trong file .env (ở ngay thư mục gốc - nếu có file env.example thì bạn đổi lại thành .env)

File .env cho phép bạn cấu hình các biến môi trường 1 cách đơn giản, nếu không muốn sử dụng file này bạn có thể cấu hình trong config/database.php

Ở đây mình sẽ kết nối với database tên congnghe5s_db

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=congnghe5s_db
DB_USERNAME=root
DB_PASSWORD=

Trong database này mình sẽ tạo 1 bảng product với các trường như hình và chèn 1 vài dòng để test :)

 

2. Cách sử dụng Query Builder trong Laravel 5

Bây giờ chúng ta bắt đầu được rùi!

Trong route tạo 1 URL để test nhé

Route::get('demo-querybuilder', 'DemoController@queryBuilder' );

Trong controller DemoController tạo hàm queryBuilder:

public function queryBuilder(){
    //Lấy tát cả dữ liệu trong bảng Product
    $data = DB::table('product')->get();
    // Hàm xuất dữ liệu như var_dump trong php thuần vậy ^^!
    dd($data);
}

cuối cùng là xem thành quả khi vào link http://localhost/congnghe5s-laravel/demo-querybuilder

 

Dưới đây là 1 số hàm khác thông dụng trong Query Builder

//Chọn cột
$product = DB::table('product')->select('name')->get();

//Chọn với điều kiện
$product = DB::table('product')->where('id',2)->get();

//Chọn với 1 trong 2 điều kiện
$product = DB::table('product')->where('id',1)
		->orWhere('status',1)
		->get();

//Sắp xếp kết quả trả về
$product = DB::table('product')->orderBy('id','DESC')->get();

//Giới hạn kết quả trả về bỏ qua 2 phần tử đầu -> lấy 1 phần tử tiếp theo
$product = DB::table('product')->skip(2)->take(1)->get();

// Điều kiện nằm giữa A và B
$product = DB::table('product')-> whereBetween('id',[1,2])->get();	

// Điều kiện không nằm trong khoảng A và B
$product = DB::table('product')-> whereNotBetween('id',[1,2])->get();

//Điều kiện kết quả nằm trong mảng
$product = DB::table('product')-> whereIn('id',[1,2])->get();

// Xoá dữ liệu có id = 2
DB::table('product')->where('id', 2)->delete();

Qua bài này chắc các bạn đã có thể kết nối Laravel với CSDL 1 cách dễ dàng đúng ko?

Ngoài Query Builder, Laravel còn cung cấp cho bạn 1 thư viện Eloquent ORM tuyệt vời để kết nối, phần này mình sẽ nói trong bài sau nhé!

Chúc các bạn thành công!