Để truy xuất các tham số truy vấn trên phụ trợ Laravel của bạn, bạn có thể sử dụng lớp "Request" hoặc phương thức trợ giúp "request[]"
Bằng cách sử dụng Phiên bản yêu cầu
Hãy tưởng tượng bạn muốn lấy truy vấn "tìm kiếm" từ URL, bạn có thể làm như sau
$searchQuery = $request->query['search'];
Nếu không có dữ liệu giá trị chuỗi truy vấn được yêu cầu, thì đối số thứ hai của phương thức này sẽ được trả về
$name = $request->query['search', 'Learn laravel'];
Bạn có thể gọi phương thức truy vấn mà không có bất kỳ đối số nào để truy xuất tất cả các giá trị chuỗi truy vấn dưới dạng một mảng kết hợp
$query = $request->query[];
query['search', 'Learn laravel']; $posts = Post::query[]->where['title', 'LIKE', $searchQuerey]->take[10]->get[]; return view['posts.index', compact['posts']]; } }
Bằng cách sử dụng request[] Helper
Mặt khác, nếu bạn thích sử dụng trình trợ giúp "request[]" thì nó sẽ như bên dưới
$searchQuery = request[]->query['search'];
Laravel có một cơ chế cơ sở dữ liệu tuyệt vời được gọi là Eloquent, cũng là một Trình tạo truy vấn mạnh mẽ, nhưng đôi khi chỉ nên sử dụng SQL đơn giản, ở dạng Truy vấn thô. Trong bài viết này, tôi sẽ chỉ cho bạn những ví dụ phổ biến nhất của phương pháp này
1. điển hình nhất. selectRaw[] với Tính toán Trung bình/Tổng/Đếm
Nếu bạn cần thực hiện groupBy[] và sau đó sử dụng một số chức năng tổng hợp từ MySQL, như AVG[] hoặc COUNT[], thì sẽ rất hữu ích khi thực hiện Truy vấn thô cho phần cụ thể đó
Ví dụ từ tài liệu Laravel
$users = DB::table['users'] ->selectRaw['count[*] as user_count, status'] ->where['status', '', 1] ->groupBy['status'] ->get[];
Một vi dụ khac
$products = DB::table['products'] ->leftjoin['category','category.product_id','=','products.id'] ->selectRaw['COUNT[*] as nbr', 'products.*'] ->groupBy['products.id'] ->get[];
Một ví dụ khác – thậm chí chúng ta có thể thực hiện avg[] và count[] trong cùng một câu lệnh
$salaries = DB::table['salaries'] ->selectRaw['companies.name as company_name, avg[salary] as avg_salary, count[*] as people_count'] ->join['companies', 'salaries.company_id', '=', 'companies.id'] ->groupBy['companies.id'] ->orderByDesc['avg_salary'] ->get[];
2. Lọc NĂM. groupByRaw, orderByRaw và cóRaw
Điều gì sẽ xảy ra nếu bạn muốn thêm một số phép tính SQL bên trong “nhóm theo” hoặc “theo thứ tự”?
Chúng tôi có các phương thức như groupByRaw[] và orderByRaw[] cho việc này. Ngoài ra, chúng ta có thể sử dụng câu lệnh “where” bổ sung sau khi nhóm, bằng cách sử dụng câu lệnh SQL “có” với hadRaw[]
Ví dụ: làm cách nào để nhóm theo NĂM của một trường ngày/giờ nhất định?
________số 8_______3. Tính toán một trường với truy vấn phụ. selectRaw[]
Nếu bạn muốn trả lại một cột cụ thể dưới dạng một phép tính từ các cột khác và bạn muốn phép tính đó xảy ra trong truy vấn SQL, đây là giao diện của nó
$products = Product::select['id', 'name'] ->selectRaw['price - discount_price AS discount'] ->get[];
Một ví dụ khác – Câu lệnh CASE của SQL
$users = DB::table['users'] ->select['name', 'surname'] ->selectRaw["[CASE WHEN [gender = 1] THEN 'M' ELSE 'F' END] as gender_text"] ->get[];
4. Truy vấn SQL cũ? . lựa chọn[]
Một ví dụ khá điển hình là khi bạn có một câu lệnh SQL từ một số dự án cũ hơn và bạn cần chuyển nó sang Eloquent hoặc Query Builder
Đoán xem, bạn không cần phải. ĐB. select[] là một tuyên bố hoàn toàn tốt
$results = DB::select['select * from users where id = ?', [1]];
5. ĐB. statement[] – Thông thường trong Migration
Nếu bạn cần thực hiện một số truy vấn SQL mà không cần xử lý bất kỳ kết quả nào, chẳng hạn như INSERT hoặc UPDATE mà không có bất kỳ tham số nào, bạn có thể sử dụng DB. tuyên bố[]
Theo kinh nghiệm của tôi, nó thường được sử dụng trong di chuyển cơ sở dữ liệu, khi một số cấu trúc bảng thay đổi và dữ liệu cũ cần được cập nhật bằng cấu trúc mới
DB::statement['UPDATE users SET role_id = 1 WHERE role_id IS NULL AND YEAR[created_at] > 2020'];
Ngoài ra, ĐB. câu lệnh [] có thể thực hiện bất kỳ truy vấn SQL nào với lược đồ, bên ngoài các cột hoặc giá trị
DB::statement['DROP TABLE users']; DB::statement['ALTER TABLE projects AUTO_INCREMENT=123'];
Cảnh báo. hãy cẩn thận với các tham số, luôn xác thực chúng
Thông báo cuối cùng ngắn
Mối nguy hiểm lớn nhất trong Truy vấn thô là chúng không được bảo mật tự động, vì vậy nếu bạn đang chuyển bất kỳ tham số nào cho truy vấn, vui lòng kiểm tra kỹ và xác thực rằng chúng có giá trị chính xác [như số chứ không phải chuỗi] và ở định dạng chính xác. Bạn có thể đọc thêm trong bài viết này