РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
282 of 1392 menu

Метод selectRaw

Метод selectRaw применяется к запросу Query Builder и позволяет внедрить произвольное SQL-выражение в секцию SELECT. Первым параметром передаётся строка с SQL-выражением, вторым - необязательный массив привязок для защиты от SQL-инъекций. Метод возвращает тот же экземпляр запроса, дополненный указанным выражением.

Синтаксис

<?php DB::table($table)->selectRaw($expression, $bindings); ?>

Пример

Давайте выберем статьи с вычисляемым полем, которое объединяет заголовок и количество просмотров:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::table('articles') ->selectRaw('title, CONCAT(title, " - ", views) as full_info') ->get(); return $res; } } ?>

Результат выполнения кода:

[ {"title": "article 1", "full_info": "article 1 - 100"}, {"title": "article 2", "full_info": "article 2 - 200"}, {"title": "article 3", "full_info": "article 3 - 150"} ]

Пример

Используем агрегатную функцию для подсчёта общего количества комментариев к статье:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::table('articles') ->selectRaw('id, title, (SELECT COUNT(*) FROM comments WHERE comments.article_id = articles.id) as comments_count') ->get(); return $res; } } ?>

Результат выполнения кода:

[ {"id": 1, "title": "article 1", "comments_count": 5}, {"id": 2, "title": "article 2", "comments_count": 3}, {"id": 3, "title": "article 3", "comments_count": 7} ]

Пример

Выполним математические вычисления прямо в запросе, используя привязки для безопасной подстановки значений:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $discount = 10; $res = DB::table('products') ->selectRaw('name, price, price - ? as discounted_price', [$discount]) ->get(); return $res; } } ?>

Результат выполнения кода:

[ {"name": "product 1", "price": 100, "discounted_price": 90}, {"name": "product 2", "price": 200, "discounted_price": 190}, {"name": "product 3", "price": 150, "discounted_price": 140} ]

Пример

Комбинируем несколько сырых выражений в одном запросе и используем функции работы с датами:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::table('orders') ->selectRaw(' id, YEAR(created_at) as year, MONTH(created_at) as month, DAY(created_at) as day, UPPER(status) as status_upper ') ->where('status', 'active') ->get(); return $res; } } ?>

Результат выполнения кода:

[ {"id": 1, "year": 2025, "month": 3, "day": 15, "status_upper": "ACTIVE"}, {"id": 2, "year": 2025, "month": 3, "day": 16, "status_upper": "ACTIVE"}, {"id": 3, "year": 2025, "month": 3, "day": 17, "status_upper": "ACTIVE"} ]

Пример

Используем условную конструкцию CASE для создания вычисляемого поля на основе существующих данных:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::table('users') ->selectRaw(' name, age, CASE WHEN age < 18 THEN "minor" WHEN age >= 18 AND age < 65 THEN "adult" ELSE "senior" END as age_group ') ->get(); return $res; } } ?>

Результат выполнения кода:

[ {"name": "user 1", "age": 16, "age_group": "minor"}, {"name": "user 2", "age": 25, "age_group": "adult"}, {"name": "user 3", "age": 70, "age_group": "senior"} ]

Смотрите также

  • метод select,
    который выбирает конкретные колонки из таблицы
  • метод addSelect,
    который добавляет колонки к уже выбранным
  • метод whereRaw,
    который добавляет сырое условие в WHERE
  • метод orderByRaw,
    который сортирует результат по сырому выражению
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить