БД Laravel-mongo

Я использую 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? Как я могу "очистить" эти изменения до начального значения?

Вы применили where к $query. Это меняет запрос. Если вам нужно сохранить оригинал для использования в будущем, создайте копию.

Alex Blex 21.05.2018 10:25

@AlexBlex, что значит «создать копию»? Например как?

Denys Siebov 21.05.2018 10:31

как $ query = ...; $ queryForSmth = $ query; $ res = queryForSmth -> ...; ?

Denys Siebov 21.05.2018 10:34

Да, вот так, но с использованием клон для получения копии объекта.

Alex Blex 21.05.2018 10:50

@AlexBlex огромное спасибо))))

Denys Siebov 21.05.2018 11:23

@DenysSiebov, если вы реализовали сообщение с clone в качестве ответа здесь.

arun 21.05.2018 11:57
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
6
101
2

Ответы 2

После этой строки

$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" = ?"

Это работает, но похоже на изобретение колеса. Мне эта штука понадобится несколько раз, непонятно (((

Denys Siebov 21.05.2018 10:32

Как и советовали в комментариях, решил эту проблему с функцией 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->... ; 
}

Другие вопросы по теме