07/09/2018, 17:32

Bài 10: Query Builder trong Laravel

-Trước đây khi làm việc với PHP thuần, để tương tác với database các bạn sẽ cần phải kết nối với database và viết những câu truy vấn hết sức là phức tạp để gọi được dữ liệu ra. Nhưng khi sử dụng các famework đặc biệt là Laravel thì các bạn sẽ không phải lo về điều đó nữa, bởi Laravel có cung ...

  -Trước đây khi làm việc với PHP thuần, để tương tác với database các bạn sẽ cần phải kết nối với database và viết những câu truy vấn hết sức là phức tạp để gọi được dữ liệu ra. Nhưng khi sử dụng các famework đặc biệt là Laravel thì các bạn sẽ không phải lo về điều đó nữa, bởi Laravel có cung cấp cho chúng ta một chức năng rất hay là Query Builder.

1, Cấu hình database.

-Trước tiên để sử dụng được 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.

-Để cấu hình Database các bạn cần mở file .env lên và cấu hình như sau.

APP_ENV=local
APP_KEY=base64:w6dZccXCvdehAax2NYUt6f/igtsyw7QTQCx2eGEQBgI=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

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

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=

-Chú thích:

  • DB_HOST : Là server chứa mysql của bạn.
  • DB_PORT: Là cổng post của server Mysql của bạn (thường để mặc định là 3306).
  • DB_DATABASE: Là tên database của bạn.
  • DB_USERNAME: Là username để truy cập vào database của bạn.
  • DB_PASSWORD: Là password để truy cập vào database của bạn.

2, Sử dụng Query Builder.

-Sau khi đã cấu hình được database (ở phần trên). Thì giờ mọi người bắt đầu thực hành truy vấn Sql với Query Builder nhé.

Lấy tất cả dữ liệu trong bảng.

-Cú Pháp:

DB::table('tablename')->get()

VD: Lấy tất cả dữ liệu trong bảng tbl_product.

Route::get('/', function () {
    $data=DB::table('tb_product')->get();
    	print_r($data);
});

Kết quả:

  IlluminateSupportCollection Object
  (
  [items:protected] => Array
  (
  [0] => stdClass Object
  (
  [id] => 5
  [title] => Váy đầm xòe Asose
  )
   
  [1] => stdClass Object
  (
  [id] => 6
  [title] => Váy đầm xòe Asose
  )
   
  )
   
  )
   

Select cột trong bảng.

-Cú pháp:

DB::table('tablename')->select('columnfirst','columnsecond')->get();

Select có điều kiện.

-Cú pháp:

+Đ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','<','filter')->get();

+Điều kiện khác:

DB::table('tablename')->where('column','<>','filter')->get();

+Điều kiện lồng:

VD:

$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();

Truy vấn tìm kiếm.

DB::table('tablename')->where('column','like','filter')->get();
// vd : DB::table('product')->where('name','like','%Sách%')->get();

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();

Unions.

$first = DB::table('users')
            ->whereNull('first_name');

$users = DB::table('users')
            ->whereNull('last_name')
            ->union($first)
            ->get();

OrderBy.

$users = DB::table('users')
                ->orderBy('name', 'desc')
                ->get();

Random.

$randomUser = DB::table('users')
                ->inRandomOrder()
                ->first();

GroupBy/having.

$users = DB::table('users')
                ->groupBy('account_id')
                ->having('account_id', '>', 100)
                ->get();

Thêm (insert).

DB::table('users')->insert(
    ['email' => '[email protected]', 'votes' => 0]
);

Sửa (update).

DB::table('users')
            ->where('id', 1)
            ->update(['votes' => 1]);

Xóa (delete).

DB::table('users')->delete();
//hoặc
DB::table('users')->where('votes', '>', 100)->delete();

3, Chú ý.

-Để sử dụng được các câu truy vấn trên bắt buộc các bạn phải:

  • Kết nối với cơ sở dữ liệu.
  • Nếu truy vấn trong controllers thì các bạn cần phải khai báo use IlluminateSupportFacadesDB; còn trong Route thì không cần.

4, Lời kết.

-Bài hôm nay khá là dài đúng không các bạn? Mình cũng thấy thế, nhưng ở phía trên mới là một số câu lệnh truy vấn cơ bản trong Query Builder còn một số câu truy vấn nâng cao nữa các bạn muốn tham khảo có thể xem tại đây nhé.

0