Sobes.tech
Back to questions
Middle+
11

Как называется паттерн цепочки вызовов в Laravel (User::where()->orderBy()->get()) и что технически делают методы внутри него, чтобы цепочка работала?

Companies where asked
CSSSR

Answer from AI

sobes.tech AI

Этот паттерн называется "Цепочка вызовов" (Method Chaining). В Laravel, например, в Eloquent ORM, методы вроде where(), orderBy(), get() реализованы так, что каждый из них возвращает объект самого запроса (обычно $this), позволяя вызывать следующий метод на том же объекте.

Технически каждый метод изменяет внутреннее состояние объекта (например, добавляет условия, сортировку и т.д.) и возвращает этот же объект. Это позволяет накапливать параметры запроса последовательно, а в конце, например, get() выполняет запрос и возвращает результат.

Пример упрощённой реализации:

class Query {
    protected $conditions = [];
    protected $order = null;

    public function where($field, $value) {
        $this->conditions[] = [$field, $value];
        return $this; // возвращаем текущий объект для цепочки
    }

    public function orderBy($field) {
        $this->order = $field;
        return $this;
    }

    public function get() {
        // здесь формируется и выполняется SQL на основе $conditions и $order
        return "Результат запроса";
    }
}

$query = (new Query())->where('id', 1)->orderBy('name')->get();