Synopsis
Я пытаюсь отфильтровать результаты своей записи. Я искал google и наткнулся на this post.Как динамически запрашивать модель Eloquent?
У меня есть таблица пользователей с одна запись is активная.
// Example 1:
$model = with(new User);
$model->where('is_active', '=', 0);
dd($model->count()); // Output: 1 (Expected: 0)
// Updated (for argument sake):
dd($model->get()->count()); // Output: 1 (Expected: 0)
Однако, когда я делаю следующее, я получаю правильный результат:
// Example 2:
dd(User::where('is_active', '=', 0)->count()); //Output: 0 (As expected);
Что я пытаюсь сделать (псевдо-код):
// Example 3:
public static function getFiltered()
{
$model = with(new static);
// This is obviously populated but for argument sake.
$filters = array(
'is_active' => 1,
);
foreach ($filters as $filter => $value) {
$model->where($filter, '=', $value);
}
return $model;
}
Я думаю, мой вопрос почему не пример 1 работа?
Принимая во внимание, что связанный вопрос имеет принятый ответ, который предполагает, что мой первый пример должен работать.
Собственно, да, связанный ответ похож на мою проблему. Даже с 'get()' я все равно получаю те же результаты. Тот факт, что 'get()' не выполняется, не имеет значения, проблема заключается в использовании статического 'where' в отличие от нестатического' where'. – ash
Я исправил свой ответ. Проблема в том, что вы делаете «новую модель», что означает, что счет будет 1 для «этой» модели. Если вы получаете новые результаты и присваиваете их новой переменной, она работает так, как ожидалось. Я просто протестировал его. – Laurence