Header Ads Widget

Sử dụng Query builder trong laravel

Query Builder giúp ta trong việc thao tác cỡ sở dữ liệu một cách thuận lợi hơn,với những câu lệnh truy vấn đơn giản thân thiện để tạo và chạy những truy vấn từ CSDL. Nó thường được sử dụng để thực thi hầu hết những thao tác về CSDL trong ứng dụng của bạn, và làm việc với tất cả những CSDL được hổ trợ.Query Builder sử dụng PDO nhằm bảo vệ ưng dụng và tránh các lỗi về SQL injection.Query Builder xây dựng lớp DB để thực hiện các câu truy vấn


– Để phục vụ cho loạt ví dụ ở dưới chúng ta cùng tạo 1 bảng dữ liệu để thực hành nhé.
1
2
3
4
5
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=12 ;

sử dụng Query Builder trong Laravel Framework

Sử dụng truy vấn lấy dữ liệu

1.Lấy tất cả dữ liệu trong bảng
1
2
$users = DB::table('users')->get();
print_r($users);
Và kết quả sẽ được như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
     [0] => stdClass Object
     (
           [id] => 12
           [name] => nobita
     )
     [1] => stdClass Object
     (
           [id] => 13
           [name] => xuka
     )
)
2.Truy vấn lấy 1 dòng dữ liệu từ bảng CSDL
1
2
$user = DB::table('users')->where('id''12')->first();
print_r($user);
Và kết quả sẽ như sau:
1
2
3
4
5
stdClass Object
(
      [id] => 12
      [name] => nobita
)
3.Truy vấn một cột từ một hàng đơn
1
2
$name = DB::table('users')->where('id''12')->pluck('name');
echo $name;
Và kết quả sẽ trả về là nobita
4.Lấy danh sách các cột giá trị
1
2
$users = DB::table('users')->lists('name');
print_r($users);
Và kết quả sẽ như sau:
1
2
3
4
5
Array
(
      [0] => nobita
      [1] => xuka
)
Ngoài ra các bạn có thể tùy chỉnh lấy danh sách các cột giá trị theo tùy chỉnh dạng key => value
Cú pháp lists(tên cột 1,tên cột 2) sẽ trả về dữ liệu dạng array('giá trị cột 2' => 'giá trị cột 1');
1
2
$users = DB::table('users')->lists('name','email');
print_r($users);
Và kết quả sẽ như sau:
1
2
3
4
5
Array
(
      [nobita@gmail.com] => nobita
      [xuka@gmail.com] => xuka
)
Cách này cũng tương đương với việc ta sử dụng cách sau:
1
2
3
4
5
6
7
$list  array();
$users = DB::table('user')->select('name''email')->get();
foreach ($users as $row)
{
   $list[$row->email] = $row->name;
}
print_r($list);
Đây cũng là trường hợp mà sẽ được sử dụng nhiều trong lúc làm việc,trước kia thì chúng ta phải sử dụng cách thứ 2,nhưng trong laravel đã hỗ trợ hàm này ngắn gọn và hiệu quả hơn.
5. Sử dụng mệnh đề select
1
2
3
4
5
$users = DB::table('users')->select('id''name')->get();
$users = DB::table('users')->distinct()->get();
$users = DB::table('users')->select('name as user_name')->get();
6.Sử dụng từ khóa where,thêm điều kiện
1
$users = DB::table('users')->where('id''>', 100)->get();
– Hoặc câu lệnh orWhere
1
2
3
4
$users = DB::table('users')
->where('id''>', 100)
->orWhere('name''nobita')
->get();
– Sử dụng where between
1
2
$users = DB::table('users')
->whereBetween('id'array(1, 100))->get();
– Sử dụng where not between
1
2
$users = DB::table('users')
->whereNotBetween('id'array(1, 100))->get();
– Sử dụng where trong 1 mảng hoặc không thuộc 1 mảng
1
2
3
4
$users = DB::table('users')
->whereIn('id'array(1, 2, 3))->get();
$users = DB::table('users')
->whereNotIn('id'array(1, 2, 3))->get();
– Sử dụng where với giá trị null hoặc có giá trị trả về nhưng lại không đặt giá trị
1
2
$users = DB::table('users')
->whereNull('name')->get();
– Đôi khi bạn cần tạo mệnh đề where phức tạp như “where exists”:
1
2
3
4
5
6
7
8
DB::table('users')
            ->whereExists(function($query)
            {
                $query->select(DB::raw(1))
                      ->from('orders')
                      ->whereRaw('orders.user_id = users.id');
            })
            ->get();
Với câu lệnh trên sẽ sinh cho ta câu lệnh sql như sau:
1
2
3
4
select * from users
where exists (
    select 1 from orders where orders.user_id = users.id
)
– Hay những mềnh đề where lồng nhau
1
2
3
4
5
6
7
8
DB::table('users')
            ->where('name''=''nobita')
            ->orWhere(function($query)
            {
                $query->where('id''>', 100)
                      ->where('email''<>''nobitacnt@gmail.com');
            })
            ->get();
Với câu lệnh trên sẽ sinh cho ta câu lệnh sql như sau:
1
select * from users where name = 'nobita' or (id > 100 and email <> 'nobitacnt@gmail.com')
7.Sử dụng Order By, Group By, và Having
1
2
3
4
5
users = DB::table('users')
->orderBy('name''desc')
->groupBy('count')
->having('count''>', 100)
->get();
8.Offset & Limit
1
$users = DB::table('users')->skip(10)->take(5)->get();

Join bảng dữ liệu

1.Câu lệnh Join cơ bản:
1
2
3
4
5
DB::table('users')
            ->join('contacts''users.id''=''contacts.user_id')
            ->join('orders''users.id''=''orders.user_id')
            ->select('users.id''contacts.phone''orders.price')
            ->get();
2.Câu lệnh join trái
1
2
3
DB::table('users')
        ->leftJoin('orders''users.id''=''orders.user_id')
        ->get();
3.Bạn cũng có thể nâng cấp với mệnh đề join
1
2
3
4
5
6
DB::table('users')
->join('orders'function($join)
{
$join->on('users.id''=''orders.user_id')->orOn(...);
})
->get();
4.Nếu bạn muốn sử dụng “where” trong mệnh đề join, bạn có thể sử dụng phương thức where và orwhere trong mệnh đề join. Thay vì so sánh 2 cột, những phương thức đó sẽ so sánh thêm cột giá trị lần nữa.
1
2
3
4
5
6
7
DB::table('users')
->join('orders'function($join)
{
$join->on('users.id''=''orders.user_id')
->where('orders.user_id''>', 5);
})
->get();

Hàm

Trong Laravel cũng có những hàm trong SQL như
1
2
3
4
5
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')->min('price');
$price = DB::table('orders')->avg('price');
$total = DB::table('users')->sum('votes');

Raw Expressions

– Trong một số trường hợp ta cần sử dụng mã SQL nguyên mẫu trong loạt truy vấn của mình. Laravel cung cấp cho bạn phương thức DB::raw
1
2
3
4
5
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status''<>', 1)
->groupBy('status')
->get();
– Tăng hoặc giảm giá trị của một cột
1
2
3
4
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);

Câu lệnh inserts dữ liệu

1.Chèn một hàng giá trị vào 1 bảng
1
2
3
DB::table('users')->insert(
array('email' => 'john@example.com''votes' => 0)
)
2.Nếu bảng có id tự động tăng, thì ban dùng insertGetId để chèn và và lấy Id
1
2
3
$id = DB::table('users')->insertGetId(
    array('email' => 'john@example.com''votes' => 0)
);
3.Thêm nhiều records vào một bảng
1
2
3
4
DB::table('users')->insert(array(
    array('email' => 'taylor@example.com''votes' => 0),
    array('email' => 'dayle@example.com''votes' => 0),
));

Câu lệnh Updates dữ liệu

1
2
3
DB::table('users')
->where('id', 1)
->update(array('votes' => 1));

Câu lênh Deletes dữ liệu

1.Xóa 1 record tại một bảng
1
DB::table('users')->where('votes''<', 100)->delete();
2.Xóa toàn bộ record trên bảng
1
DB::table('users')->delete();
3.Xóa nội dung của bảng
1
DB::table('users')->truncate();

Câu lệnh Union

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

Nhận xét