Hướng dẫn dùng laravel orderby trong PHP

Hàm sort() sẽ sắp xếp các phần tử của một mảng theo thứ tự từ thấp đến cao.

Hướng dẫn dùng laravel orderby trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Cú Pháp

Cú Phápsort($array, $sort_flag);

Trong đó:

  • $array là mảng cần sắp xếp.
  • $sort_flag là tham số không bắt buộc, quy định kiểu sắp xếp.

Vậy có các kiểu sắp xếp nào?

Bài viết này được đăng tại [free tuts .net]

  • SORT_REGULAR :  kiểu mặc định, so sánh bình thường.
  • SORT_NUMERIC : so sánh dựa vào số.
  • SORT_STRING :  so sánh dựa vào  chuỗi.
  • SORT_NATURAL: so sanh theo thứ tự alphabet.
  • SORT_FLAG_CASE : sử dụng kết hợp với SORT_STRING hoặc SORT_NATURAL để sắp xếp chuỗi mà không phân biệt chữ hoa chư thường.

Hàm sẽ trả về TRUE nếu sắp xếp thành công và FALSE nếu thất bại.

Ví dụ

Code

$subject = array(
	"php",
	 "java",
	  "js", 
	  "html"
);
sort($subject);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = html
subject[1] = java
subject[2] = js
subject[3] = php

Code

$subject = array(
	1,
	43,
	55,
	24
);
sort($subject, SORT_NUMERIC);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = 1
subject[1] = 24
subject[2] = 43
subject[3] = 55

Code

$subject = array(
	'laravel', 
	'Zend', 
	'cI'
);
sort($subject, SORT_NATURAL);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = Zend
subject[1] = cI
subject[2] = laravel

Ta có thể thấy tuy rằng z đúng sau c nhưng Zend vẫn được xếp trên cI do Z được viết hoa.Để sắp xếp không phân biệt chữ hoa chữ thường ta nên dùng kết hợp với SORT_FLAG_CASE.

Code

$subject = array(
	'laravel', 
	'Zend', 
	'cI'
);
sort($subject, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = cI
subject[1] = laravel
subject[2] = Zend

chữ Zend đã về đúng vị trí của nó :D  

Tham khảo : php.net

Trong bài viết này mình sẽ chia cách sử dụng orderBy với một trường trong bảng có quan hệ. Bạn có thể dễ dàng sử dụng orderby theo asc và desc với một trường trong bảng quan hệ.
Các bạn hãy xem các ví dụ để hiểu hơn nhé:

Example 1:

Ví dụ này mình sẽ sử dụng phương thức order by để sort tất cả dữ liệu trong bảng author theo chiều asc hoặc desc với trường name:

Laravel Orderby Belongsto Relationship ASC

$posts = Post::with(['author' => function ($q){ $q->orderBy('name'); }]) ->get();

Laravel Orderby Belongsto Relationship DESC

$posts = Post::with(['author' => function ($q){ $q->orderBy('name', 'DESC'); }]) ->get();

Example 2:

Ví dụ này mình sẽ sử dụng phương thức sortBy() và sortByDesc() để sắp sếp dữ liệu của bảng post theo kiểu ASC hoặc DESC dựa vào trường name trong bảng author nhé.

Laravel Orderby Relation Column using Collection ASC

$posts = Post::get()->sortBy(function($query){ return $query->author->name; }) ->all();

Hoặc

$posts = Post::get()->sortBy('author.name')->all();

Chú ý: các phương thức sortBy, sortByDesc phải đặt sau hàm get() nhé, vì chúng ta chỉ sort được khi dữ liệu trả về là kiểu collection.

$posts = Post::query()->sortBy( Author::select('name') ->whereColumn('id', 'posts.author_id') ->orderByDesc('name') ->limit(1) )->paginate(10);

Laravel Orderby Relation Column using Collection DESC

$posts = Post::get()->sortByDesc(function($query){ return $query->author->name; }) ->all();

Hoặc

$posts = Post::get()->sortByDesc('author.name')->all();

Chú ý: các phương thức sortBy, sortByDesc phải đặt sau hàm get() nhé, vì chúng ta chỉ sort được khi dữ liệu trả về là kiểu collection.

$posts = Post::query()->sortByDesc( Author::select('name') ->whereColumn('id', 'posts.author_id') ->orderByDesc('name') ->limit(1) )->paginate(10);

Example 3:

Bây giờ chúng ta sẽ sử dụng inner join và order by với một trường trong bảng quan hệ authors nhé:

Laravel Orderby Relation Column using Join ASC

$posts = Post::select('*') ->join('authors', 'posts.author_id', '=', 'authors.id') ->orderBy('authors.name', 'ASC') ->paginate(10);

Laravel Orderby Relation Column using Join DESC

$posts = Post::select('*') ->join('authors', 'posts.author_id', '=', 'authors.id') ->orderBy('authors.name', 'DESC') ->paginate(10);