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