Truy vấn CSDL thuận tiện và mềm dẻo, có thể hỗ trợ hầu hết các thao tác với CSDL và support nhiều loại CSDL khác nhau.
Sau đây là 1 số cách truy vấn hữu dụng trong 1 số tình huống phức tạp
1. JOINS
Basic Join Statement
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();
Left Join Statement
DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
Advanced join clauses
DB::table('users')
->join('contacts', function($join)
{
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
Trường hợp muốn sử dụng thêm điều kiện "Where" trong lệnh JOINS
DB::table('users')
->join('contacts', function($join)
{
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.user_id', '>', 5);
})
->get();
2. ADVANCED WHERE
Parameter Grouping
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
Câu lệnh truy vấn sẽ như sau:
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
Exists Statements
DB::table('users')
->whereExists(function($query)
{
$query->select(DB::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
Câu lệnh truy vấn sẽ như sau:
select * from users
where exists (
select 1 from orders where orders.user_id = users.id
)
3. KẾT HỢP TRUY VẤN THUẦN (RAW)
Đôi khi bạn buộc phải lồng các truy vấn thuần vào câu lệnh như dưới đây, hãy lưu ý để tránh bị lỗi SQL Injection
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
Source: http://laravel.com/docs/4.2/queries