Вы должны устанавливать переменную $order
каждый раз, когда добавляете предложение, например:
$orders = new Order;
if ($request->has('client_id')) {
$orders = $orders->where('client_id' ,$request->client_id);
}
if ($request->has('city_id')) {
$orders = $orders->where('city_id', $request->city_id);
}
// then run $orders->get(); or other stuff
Новые значения $orders
были бы соответственно обновлены.
Довольно интересно, что, как вы заявили, модель вызвала проблему. При создании нового экземпляра Order
с использованием ключевого слова new
модель не распознает построитель запросов по умолчанию (по какой-то причине), что означает, что dump()
в модели нет массива, в который можно вставить новый адрес.
Другие способы, которыми вы могли бы это сделать, - это иметь начальный запрос, например,
Order::whereNotNull('id');
//Otherwise as suggested use `->query()` or `newQuery()`
Имейте в виду, query()
подобен псевдониму newQuery()
за исключением того, что query()
создает свежий экземпляр модели перед вызовом newQuery()
.
Вместо этого вы можете использовать getQuery()
, чтобы получить свойство $query
модели вместо двух, поскольку вам не нужно повторно создавать экземпляр построителя.
Следовательно, вы можете иметь:
$orders = Order::getQuery();
if ($request->has('client_id')) {
$orders->where('client_id' ,$request->client_id);
}
if ($request->has('city_id')) {
$orders->where('city_id', $request->city_id);
}
// then run $orders->get(); or other stuff
PS: я проверял это на L5.4