Я использую https://github.com/jenssegers/laravel-mongodb
$query = $this->proposal->where('status', 'approved')
->with(['evaluations', 'user', 'contributions'])
->with(['reviews' => function ($q) {
$q->where('status','approved')->orderBy('created_at', 'desc');
}]);
if ( .... ) {
dd($query->toSql()); // "select * from "proposals" where "status" = ?"
$proposalsFoundByTile = $query->where('title','like',"%$request->search%")->get();
dd($query->toSql()); // "select from "proposals" where "status" = ? and "title" like ?"
...
}
Почему изменилось значение $ query? Как я могу "очистить" эти изменения до начального значения?
@AlexBlex, что значит «создать копию»? Например как?
как $ query = ...; $ queryForSmth = $ query; $ res = queryForSmth -> ...; ?
Да, вот так, но с использованием клон для получения копии объекта.
@AlexBlex огромное спасибо))))
@DenysSiebov, если вы реализовали сообщение с clone в качестве ответа здесь.

После этой строки
$proposalsFoundByTile = $query->where('title','like',"%$request->search%")->get();
положи это,
$key = array_search("title", array_column($query->getQuery()->wheres,
'column'));
unset($query->getQuery()->wheres[$key]);
Тогда это вернется,
dd($query->toSql()); // "select from "proposals" where "status" = ?"
Это работает, но похоже на изобретение колеса. Мне эта штука понадобится несколько раз, непонятно (((
Как и советовали в комментариях, решил эту проблему с функцией clone().
$query = $this->proposal->where('status', 'approved')
->with(['evaluations', 'user', 'contributions'])
->with(['reviews' => function ($q) {
$q->where('status','approved')->orderBy('created_at', 'desc');
}]);
if ( .... ) {
$subQuery = clone($query);
$proposalsFoundByTile = $subQuery->where('title','like',"%$request->search%")->get();
...
$subQuery = clone($query);
$some_var = $subQuery->... ;
}
Вы применили
whereк$query. Это меняет запрос. Если вам нужно сохранить оригинал для использования в будущем, создайте копию.