Если вы работали с Laravel, скорее всего вы сразу начали использовать Eloquent ORM и пропустили чистые запросы к БД. Однако вы могли пропустить классную вещь — конструктор запросов Fluent Query Builder. Если вы делали запросы наподобие PHPModel::where('name', 'John')
, значит, вы привыкли к удивительному синтаксическому сахару, который Fluent добавляет в ваш код.
Но очень не просто разобраться, какую древнюю магию использовали Тэйлор и команда, чтобы воплотить эту мечту в реальность. Чтобы начать, давайте вспомним функцию PHPnewQuery
в модели Eloquent, в которой все начинается с создания конструктора запросов Eloquent. Затем мы вызываем его PHPsetTable
— просто берётся результат вызова функции PHPgetTable
нашей модели и задается таблица для нашего соединения с БД. Мы также задаём отношения в зависимости от атрибута with (в следующих статьях мы рассмотрим подробнее, как конструктор запросов загружает отношения). Затем мы проверяем, хотим ли мы включить или исключить мягко удалённые модели (soft-deleted models). Если надо их исключить, то мы добавляем к запросу условие через PHPgetQualifiedDeletedAtColumn
, который по умолчанию deleted_at.
Теперь, мы можем использовать наш экземпляр конструктора запросов Eloquent. Если вы знакомы с Fluent, то вы можете выполнять все ваши обычные запросы, вперемешку с запросами Eloquent. Но действительно здорово то, что конструктор запросов Eloquent предоставляет множество вспомогательных функций, которые позволяют писать в четком, быстром синтаксисе ORM, который и делает Eloquent великолепным.
Метод PHPFind
Скорее всего первым методом запросов Eloquent, который вы изучите, будет метод поиска — PHPfind()
. Он вызывает метод модели PHPgetKeyName
и возвращает запрос вида PHPwhere($primaryKey, '=', $id)
. А PHPfindOrFail
выполняет тот же запрос и, если модель не найдена, возбуждает исключение PHPModelNotFoundException
.
Этот список будет постепенно обновляться, по мере выявления отличий между конструкторами запросов Eloquent и Fluent.
Если вам захочется посмотреть исходники конструктора запросов Eloquent, вы можете сделать это через Github.