Tạo một query lấy ra tất cả các users có username là test và trạng thái active là 1
SELECT * FROM users where username = 'test' AND active = 1;
Câu truy vấn trên được viết trong laravel theo các cách sau
// Cách 1
$users = User::where([
'username' => 'test',
'active' => 1,
])->get();
// Cách 2
$users = User::where('username', 'test')->where('active', 1)->get();
Tạo một query lấy tất cả các users có first_name hoặc last_name là test
// Mysql query
SELECT * FROM users where first_name = 'test' OR last_name = 'test';
// Laravel eloquent
$users = User::where('first_name', 'test')
->orWhere('first_name', 'test')->get();
Câu query sử dụng multiple operator, lấy tất cả các users có first_name chứa từ test, active khác 0, hoặc first_name là fixed
// Mysql query
SELECT * FROM users where first_name like '%test%' AND active != 0 OR first_name = 'fixed';
// Laravel eloquent
$users = User::where([
['first_name', 'like', 'test'],
['active', '<>', 0],
['first_name', '=', 'fixed'],
])->get();
// Where multiple operator
$query->where([
['column_1', '=', 'value_1'],
['column_2', '<>', 'value_2'],
[COLUMN, OPERATOR, VALUE],
...
])
// Mysql query
SELECT * FROM users
WHERE column1 = value1
AND (column2 = value2 or column3 = value3)
AND (column4 = value4 and column5 = value5)
// Laravel eloquent
$value2 = 'value2';
$value3 = 'value3';
$value4 = 'value4';
$value5 = 'value5';
$users = User::where('column1', '=', 'value1')
->where(function($query) use ($value2, $value3) {
$query->where('column2', $value2)
->orWhere('column3', $value3);
})
->where(function($query2) use ($value4, $value5) {
$query2->where('column4', $value4)
->where('column5', $value5);
})->get();
Lấy ra tất cả các sản phẩm được public có title bằng test hoặc các sản phẩm được public có tag name là test
$title = 'test';
$query = Product::where([
'published' => 1,
['title', 'LIKE', '%' . $title . '%']
])->orWhere(function($query) use ($title) {
$query->where([
'published' => 1
])
->whereHas('tags', function (Builder $query) use ($title) {
$query->where('name', 'like', '%' . $title . '%');
});
})
->get();
Lấy ra tất cả các sản phẩm còn hàng
// Cần dùng having mà không thể dùng where
// do where không thể thực hiện với các hàm tính tổng
// một sản phẩm có thể có nhiều items, is_stock lưu số hàng còn
Product::withSum('items', 'in_stock')
->having('items_sum_in_stock', '>', 0);
Lấy ra tổng số tiền người dùng mua 1 sản phẩm
Product::withSum('transactions as sum_price' , 'price');
Lấy ra tổng số tiền có thuế và phí ship của một sản phẩm có trạng thái đơn hàng là 2
Product::withCount([
'transactions AS total_price' => function ($query) {
$query->selectDB::raw("SUM(non_taxed_price + total_taxed + shipping_fee) as total"))
->where('status', 2);
}
]);
Lấy ra tổng số tiền người dùng mua 1 sản phẩm mà trạng thái đơn hàng = 2
Product::withCount([
'transactions AS sum_price' => function ($query) {
$query->select(DB::raw("SUM(price) as total"))
->where('status', 2);
}
]);
Lấy ra tổng số người dùng có trạng thái đơn hàng = 2
Product::withCount([
'transactions AS total_transaction' => function ($query) {
$query->select(DB::raw("COUNT(DISTINCT(user_id))"))
->where('status', 2);
}
]);
Lấy ra tổng số transactions của 1 sản phẩm
Product::withCount('transactions as total_transaction');
Lấy ra tổng số transactions có status = 2 của 1 sản phẩm
Product::withCount([
'transactions AS total_transaction' => function ($query) {
$query->where('status', 2);
}
]);
Sắp xếp các item của sản phẩm theo thứ tự item còn nhiều hàng lên trước và lấy tổng số transaction của item đó.
Product::with(['items' => function ($q) {
$q->withSum('itemTransactions as sum_stock' , 'stock')
->orderBy('in_stock', 'DESC');
}]);