Метод orderByRaw
Метод orderByRaw применяется к запросу Eloquent
или Query Builder и позволяет сортировать результаты
с помощью произвольного SQL-выражения. В отличие от
метода orderBy, который принимает только имя
колонки и направление сортировки, orderByRaw
даёт возможность использовать функции базы данных,
условные конструкции и другие сложные выражения.
Первым параметром передаётся строка с SQL-выражением,
вторым - массив для привязки параметров (необязательно).
Синтаксис
<?php
Model::orderByRaw($expression, $bindings = []);
?>
Пример
Давайте отсортируем статьи по длине поля 'string':
<?php
use AppModelsArticle;
$articles = Article::orderByRaw('LENGTH(string) DESC')->get();
foreach ($articles as $article) {
echo $article->string;
}
?>
Результат выполнения кода:
"longest string here"
"medium text"
"short"
Пример
Давайте отсортируем пользователей по имени, но так, чтобы записи с определённым значением были в начале:
<?php
use AppModelsUser;
$users = User::orderByRaw("CASE WHEN string = 'admin' THEN 0 ELSE 1 END")->get();
foreach ($users as $user) {
echo $user->string;
}
?>
Результат выполнения кода:
"admin"
"user"
"user"
"guest"
Пример с привязкой параметров
Давайте отсортируем статьи по дате с использованием функции базы данных и безопасной привязкой параметров:
<?php
use AppModelsArticle;
use IlluminateSupportCarbon;
$date = Carbon::now()->subDays(30);
$articles = Article::orderByRaw(
"CASE WHEN created_at > ? THEN 0 ELSE 1 END",
[$date]
)->get();
foreach ($articles as $article) {
echo $article->string;
}
?>
Результат выполнения кода:
"New article 1"
"New article 2"
"Old article 1"
Смотрите также
-
метод
orderBy,
который задаёт стандартную сортировку по колонке -
метод
orderByDesc,
который сортирует по убыванию -
метод
selectRaw,
который позволяет использовать сырые SQL-выражения для выборки -
метод
latest,
который сортирует по полю'created_at'по убыванию