Laravel различное использование условия where - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу спросить о некоторой функции в Laravel, я работаю со старым кодом, написанным кем-то другим, и я хочу понять, почему он написан таким образом:

$users = Users::all();
$results = $users->where('age', '>','30')->get();

Мой вопрос как можно использовать предложение where с переменной $ users? Это работает нормально, без ошибок и возвращает требуемые результаты. Но, насколько мне известно, выражение 'where' может использоваться следующим образом:

Classname::where()->get()

Реализует ли пользовательская модель какую-либо функцию или использует что-то, чтобы иметь возможность вызывать предложение 'where' таким образом? Когда я пытаюсь сделать то же самое, но с новой моделью, которую я создаю, я получаю

"Type error: Too few arguments to function Illuminate\\Support\\Collection::get()

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Как можно использовать предложение 'where' с переменной 'users'?

Можно использовать предложение where, поскольку метод all () возвращает коллекцию, а методы where() и get() доступны в Collection class.

Реализует ли пользовательская модель какую-либо функцию или использует что-то, чтобы иметь возможность вызывать выражение 'where' таким образом?

Каждая модель Eloquent выполняет функцию построитель запросов , который позволит вам добавлять ограничения и впоследствии получать результаты с помощью метода get().

0 голосов
/ 07 апреля 2020
// Collection::get() is diferent with QueryBuilder::get()

$builder = Users::query(); // you got QueryBuilder object
$builder->where('age', '>','30'); // you got QueryBuilder object
$list = $builder->get(); // you got Collection object
$list->where('age', '>','30'); // you got Collection object

// Collection object has 'get', but it require argument.
// QueryBuilder object has 'get' too, but do not require argument.
...