Làm cách nào để nhận truy vấn trong Laravel?

Để 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

Làm cách nào để nhận truy vấn SQL từ truy vấn Laravel?

Phương thức đầu tiên để nhận truy vấn của một lệnh gọi Eloquent là sử dụng phương thức toSql[] . Phương thức này trả về truy vấn mà không cần chạy truy vấn – tốt nếu bạn không muốn thay đổi dữ liệu và chỉ nhận truy vấn – nhưng phương thức này không hiển thị toàn bộ truy vấn nếu truy vấn của bạn phức tạp hơn hoặc nếu có truy vấn phụ.

Làm cách nào để lấy dữ liệu từ truy vấn trong Laravel?

Sau khi định cấu hình cơ sở dữ liệu, chúng tôi có thể truy xuất các bản ghi bằng cách sử dụng mặt tiền DB với phương thức chọn . Cú pháp của phương thức select như trong bảng sau. Chạy một câu lệnh chọn đối với cơ sở dữ liệu.

Truy vấn [] trong Laravel là gì?

Trình tạo truy vấn cơ sở dữ liệu của Laravel cung cấp giao diện thuận tiện, trôi chảy để tạo và chạy các truy vấn cơ sở dữ liệu . Nó có thể được sử dụng để thực hiện hầu hết các hoạt động cơ sở dữ liệu trong ứng dụng của bạn và hoạt động hoàn hảo với tất cả các hệ thống cơ sở dữ liệu được Laravel hỗ trợ.

Làm cách nào để in truy vấn SQL trong Laravel 8?

Xem ví dụ bên dưới. .
$user = Người dùng. trong đó['id',1]->toSql[];
ĐB. enableQueryLog[]; . lấy[]; . getQueryLog[];
ĐB. enableQueryLog[]; . lấy[]; . getQueryLog[];

Chủ Đề