Методы и примеры кода для создания сложных запросов с помощью Eloquent в Laravel

Eloquent — это популярная библиотека ORM (объектно-реляционного сопоставления) в Laravel, фреймворке PHP. Он обеспечивает удобный способ взаимодействия с базами данных с использованием выразительного и гибкого синтаксиса построителя запросов. Сложные запросы обычно включают в себя несколько условий, объединений, подзапросов или агрегатных функций. Вот несколько методов, которые вы можете использовать в Eloquent для создания красноречивых сложных запросов, а также примеры кода:

  1. where():
    Метод where()используется для добавления базового предложенияwhere в запрос. Вы можете использовать различные операторы, такие как «=”, «<», «>» и т. д., и объединять несколько методов where()для добавления дополнительных условий. Вот пример:
$users = DB::table('users')
            ->where('age', '>', 18)
            ->where('country', '=', 'USA')
            ->get();
  1. join():
    Метод join()позволяет выполнять внутренние или внешние соединения между таблицами. Вы можете указать таблицу для объединения, столбец для объединения и оператор. Вот пример:
$users = DB::table('users')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.*', 'orders.order_date')
            ->get();
  1. subquery():
    Метод subquery()позволяет включить подзапрос в основной запрос. Это полезно, когда вам нужно использовать результат одного запроса в качестве условия в другом запросе. Вот пример:
$users = DB::table('users')
            ->whereIn('id', function ($query) {
                $query->select('user_id')
                      ->from('orders')
                      ->where('status', '=', 'completed');
            })
            ->get();
  1. groupBy():
    Метод groupBy()используется для группировки результатов запроса по определенному столбцу. Он часто используется в сочетании с агрегатными функциями, такими как count(), sum()и т. д. Вот пример:
$users = DB::table('users')
            ->select('country', DB::raw('count(*) as total'))
            ->groupBy('country')
            ->get();
  1. orderBy():
    Метод orderBy()используется для сортировки результатов запроса на основе столбца. Вы можете указать столбец для сортировки и направление сортировки (по возрастанию или убыванию). Вот пример:
$users = DB::table('users')
            ->orderBy('name', 'asc')
            ->get();
  1. having():
    Метод having()используется для добавления условий к агрегированным столбцам при использовании метода groupBy(). Это позволяет фильтровать набор результатов на основе совокупных значений. Вот пример:
$users = DB::table('users')
            ->groupBy('country')
            ->having('total', '>', 100)
            ->get();