Middle+
Comment s'appelle le patron de chaîne d'appels dans Laravel (User::where()->orderBy()->get()) et que font techniquement les méthodes à l'intérieur pour que la chaîne fonctionne?
sobes.tech IA
Réponse de l'IA
Этот паттерн называется "Цепочка вызовов" (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();