orderByRaw() trong Laravel: Sức mạnh của truy vấn SQL tùy chỉnh
3533

📌 Sử dụng Raw Query để Order Kết Quả trong Laravel

Trong Laravel, bạn có thể sử dụng raw SQL expressions để tuỳ chỉnh sắp xếp (ORDER BY) khi truy vấn Eloquent.


🔹 Cách 1: Dùng orderByRaw()

Laravel cung cấp phương thức orderByRaw(), cho phép truyền vào một truy vấn SQL tùy chỉnh để sắp xếp kết quả.

📝 Ví dụ 1: Sắp xếp theo độ dài chuỗi

Giả sử bạn muốn sắp xếp danh sách người dùng theo độ dài của tên (LENGTH(name)):

use App\Models\User;
use Illuminate\Support\Facades\DB;

$users = User::orderByRaw('LENGTH(name) DESC')->get();

📌 Kết quả: User có tên dài nhất sẽ được xếp đầu.


📝 Ví dụ 2: Sắp xếp theo điều kiện tuỳ chỉnh

Giả sử bạn có danh sách sản phẩm, trong đó:

  • Nếu trạng thái"featured", sản phẩm sẽ đứng đầu.
  • Sau đó, sắp xếp tiếp theo created_at.

Bạn có thể sử dụng orderByRaw() như sau:

$products = Product::orderByRaw("CASE WHEN status = 'featured' THEN 1 ELSE 2 END")
                   ->orderBy('created_at', 'desc')
                   ->get();

📌 Kết quả:

  • Các sản phẩm có status = 'featured' sẽ đứng đầu.
  • Sau đó, các sản phẩm khác sẽ được sắp xếp theo created_at giảm dần.

📝 Ví dụ 3: Sắp xếp theo nhiều giá trị cụ thể

Bạn có danh sách đơn hàng (orders), và bạn muốn sắp xếp theo một danh sách trạng thái cố định:

  • "pending" (chờ xử lý) trước
  • "processing" (đang xử lý) sau
  • "completed" (hoàn thành) cuối cùng

Bạn có thể dùng FIELD() trong MySQL:

$orders = Order::orderByRaw("FIELD(status, 'pending', 'processing', 'completed')")->get();

📌 Kết quả:

  • Các đơn hàng pending xuất hiện trước.
  • Tiếp theo là processing.
  • Cuối cùng là completed.

🔹 Cách 2: Dùng DB::raw() kết hợp với orderBy()

Ngoài orderByRaw(), bạn có thể dùng DB::raw() trong orderBy():

use Illuminate\Support\Facades\DB;

$users = User::orderBy(DB::raw('LENGTH(name)'), 'desc')->get();

📌 Cách này tương tự orderByRaw(), nhưng không linh hoạt bằng.


📌 Khi nào nên dùng orderByRaw()?

Trường hợp Nên dùng?
Sắp xếp theo biểu thức SQL phức tạp (CASE, FIELD, LENGTH) ✅ Có
Chỉ cần sắp xếp theo cột thông thường (created_at, name) ❌ Không cần
Sắp xếp theo thứ tự tuỳ chỉnh (status = 'featured' trước) ✅ Có
Sử dụng database không hỗ trợ các hàm SQL nâng cao ❌ Không nên

🎯 Kết luận

  • orderByRaw() là cách mạnh mẽ để sắp xếp theo điều kiện đặc biệtorderBy() không hỗ trợ.
  • Có thể sử dụng CASE, FIELD, LENGTH, hoặc bất kỳ SQL function nào.
  • Nếu chỉ cần sắp xếp theo cột đơn giản, nên dùng orderBy().

🚀 Dùng orderByRaw() khi cần logic sắp xếp phức tạp!

Danh mục


  1. Khác
  2. ThreeJS
  3. Ubuntu/Linux
  4. HTML/CSS
  5. Git
  6. Amazon Web Services
  7. Javascript
  8. Docker
  9. Laravel

Bài viết liên quan


Hiển thị giá trị trong Blade

Hiển thị giá trị trong Blade

01.08.2024
Author: ADMIN
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!
Cấu Trúc Điều Kiện và Vòng Lặp Trong Blade

Cấu Trúc Điều Kiện và Vòng Lặp Trong Blade

01.08.2024
Author: ADMIN
Khám phá các cấu trúc điều kiện và vòng lặp trong Laravel Blade. Tận dụng @if, @foreach, @forelse để hiển thị dữ liệu linh hoạt, giúp mã nguồn dễ đọc, sạch sẽ và tối ưu hơn!
Layout: @include, @extends, @section, @yield

Layout: @include, @extends, @section, @yield

01.08.2024
Author: ADMIN
Hướng dẫn chi tiết về @include, @extends, @section và @yield trong Laravel Blade. Tối ưu hóa tái sử dụng giao diện, tổ chức mã rõ ràng, giúp phát triển và bảo trì ứng dụng dễ dàng hơn!
Blade Components

Blade Components

01.08.2024
Author: ADMIN
Laravel Blade Components giúp bạn tạo giao diện tái sử dụng, truyền dữ liệu linh hoạt và sử dụng slots thông minh. Hướng dẫn chi tiết giúp mã nguồn sạch hơn, dễ bảo trì và phát triển nhanh chóng!

Bài viết khác

Routing

Routing

01.08.2024
Author: ADMIN
Hướng dẫn chi tiết về Basic Routing trong Laravel, từ cách định nghĩa route, sử dụng middleware, route caching đến route naming giúp tối ưu hóa ứng dụng.
Blade Basics

Blade Basics

01.08.2024
Author: ADMIN
Khám phá Blade trong Laravel: từ if-else, loops, kế thừa layout đến include sub-views. Giúp code gọn gàng, dễ quản lý và bảo trì hơn!
9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

01.08.2024
Author: ADMIN
Khám phá 9 mẹo Blade giúp bạn viết code Laravel sạch, tối ưu và chuyên nghiệp hơn. Từ @forelse, @auth, @guest, đến format ngày, tối ưu SEO – tất cả trong một bài viết súc tích, dễ áp dụng!
Hiển thị giá trị trong Blade

Hiển thị giá trị trong Blade

01.08.2024
Author: ADMIN
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!