Почему модель записанная в переменную работает не правильно?

Почему после первого запроса, модель изменяется если я записываю ее в переменную?

$this->order = MyModel::where('id', $this->id);
$foo = $this->order->where('id_user', 1)->count(); //работает
$bar = $this->order->where('id_user', 2)->count(); //не работает

Проведя небольшой эксперимент я понял, что если я во второй строке заменю where на orWhere, окажется что он запоминает первое значение. Я не совсем понимаю эту механику, кто поможет разобраться в этом, и как сделать, чтобы модель не изменялась? Или на каждой итерации нужен новый объект модели?


Ответы (1 шт):

Автор решения: Daniel Protopopov

Потому что у вас в order - Eloquent Builder, а не модель с данными. Грубо говоря это данные для построения запроса к БД. В первом запросе count() вы ей добавляете условие №1, и во второй тоже, но во втором запросе будет и первое, и второе условие.

Вам нужно делать запросы отдельно:

$foo = MyModel::where(['id' => $this->id, 'id_user' => 1])->count();
$bar = MyModel::where(['id' => $this->id, 'id_user' => 2])->count();
→ Ссылка