При использовании scopeBindings я обязательно должен передать в аргументы контроллера необходимые модели?

При использовании метода scopeBindings в Laravel, вы не обязаны передавать необходимые модели в аргументы контроллера, но в некоторых случаях это может быть полезно или даже необходимо.

scopeBindings - это метод, который позволяет передавать дополнительные параметры в области видимости модели. Такие параметры могут быть использованы для фильтрации результатов запроса или настройки его поведения.

Для того чтобы использовать scopeBindings, необходимо сначала определить соответствующий метод в модели, который будет принимать аргументы:

public function scopeMyScope($query, $param1, $param2)
{
    return $query->where('column1', $param1)
                 ->where('column2', $param2);
}

Затем, для использования этого scope в контроллере, вы можете вызвать его несколькими способами:

// Вариант 1: Передавая параметры вручную
$results = MyModel::myScope($value1, $value2)->get();

// Вариант 2: Используя контроллер для передачи параметров через метод `scopeBindings`
$results = MyModel::query()
                  ->myScope()
                  ->withScopes($this->scopeBindings())
                  ->get();

Ключевая часть здесь - это метод withScopes(), который передает аргументы, возвращенные методом scopeBindings(), в область видимости модели. Об этом методе мы еще поговорим ниже.

Для использования scopeBindings вы также должны определить метод scopeBindings() в вашем контроллере.

protected function scopeBindings()
{
    return [
        'param1' => $value1,
        'param2' => $value2,
    ];
}

Этот метод возвращает массив, где ключами являются имена параметров, определенных в scope методе модели, а значения - соответствующие значения этих параметров для текущего запроса.

Таким образом, когда мы вызываем $this->scopeBindings() в контроллере, Laravel автоматически передает эти значения в метод scopeMyScope модели, и результаты запроса будут отфильтрованы в соответствии с указанными параметрами.

В общем случае, использование scopeBindings не является обязательным в Laravel, но может быть очень полезным, если вам необходимо передать дополнительные параметры в область видимости модели.