Я использую ограничение нетерпеливой нагрузки с анонимной функцией:
$users = App\User::with(['posts' => function ($query) {
$query->where('title', 'like', '%first%');
}])->get();
Теперь я хочу заменить анонимную функцию функцией класса. Согласно PHP: Как использовать функцию класса в качестве обратного вызова Я нашел
Метод экземпляра объекта передается как массив, содержащий
объект с индексом 0 и имя метода с индексом 1.
Таким образом, я ожидал, что будет работать следующее:
public function start()
{
$users = App\User::with(['posts' => [$this, 'addRestrain']])->get();
// ...
}
private function addRestrain($query)
{
$query->where('title', 'like', '%first%');
}
Однако Laravel обнаруживает, что переданный параметр - это не замыкание, а массив:
"Ошибка типа: аргумент 3 передан
Подсветка \ База данных \ Eloquent \ Builder :: eagerLoadRelation () должна быть
экземпляр Closure, заданный массив, вызванный в
Означает ли это, что невозможно использовать функцию класса для ограничения активной нагрузки?