Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài viết bạn đang xem là tài liệu của Laravel 5x (Giờ đã ngừng support). Bạn có thể xem tài liệu của Laravel mới nhất và đầy đủ tại đây.

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 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ả:

  Illuminate\Support\Collection 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', '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 Illuminate\Support\Facades\DB; 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é.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

6 Comments

thanks ad

cu tèo

6 năm trước

thanks ad nhiều

cu tèo 1

6 năm trước

cho mình hỏi ngoài lề chút :)) mình thấy màu code khá đẹp, ad dùng code editor và theme nào vậy ạ ?

Bách

6 năm trước

bài viết khá đầy đủ cảm ơn admin

(có góp ý nhỏ là anh nên nhúng plugin comment fb cho bài viết dễ tương tác hơn)

dương đình thành

5 năm trước

Làm sao để nhìn thấy câu lệnh truy vấn select, insert ... trong laravel ạ

Tran Kim Anh

5 năm trước

Bạn có thể sử dụng phương thức  enableQueryLog() và getQueryLog() như sau:

DB::enableQueryLog();
$arr_user = DB::table('users')->select('name', 'email as user_email')->get();
dd(DB::getQueryLog());

Hoặc dùng package Laravel Debug Bar, hướng dẫn: https://toidicode.com/huong-dan-tich-hop-va-su-dung-laravel-debugbar-package-201.html

Vũ Thanh Tài

5 năm trước

Bình luận

Captcha