@wearts_ru

Laravel Eloquent суммирует разные запросы. Как избавиться?

есть код:
$model = new \App\Item;

if($value = $request->get('value'))
    $model = $model->where('title', 'like', '%'.$value.'%');

$params = $model->whereNotIn('id', $ids)->orderBy('title', 'asc')->get();
$paramschecked = $model->whereIn('id', $ids)->orderBy('title', 'asc')->get();

$query= $model->whereIn('id', $ids)->orderBy('title', 'asc')->toSql();

dd($query);


На выходе получаю:
string(192) "select * from `items` where `title` like ? and `id` not in (?, ?, ?, ?, ?, ?) and `id` in (?, ?, ?, ?, ?, ?) and `id` in (?, ?, ?, ?, ?, ?) order by `title` asc, `title` asc, `title` asc"

Почему запросы суммируются?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
@iamoverit
Вызывая $model->whereNotIn('id', $ids) вы устанавливаете внутри объекта $model свойство where которое учитывается при последующем обращении к $model->get()
что бы сделать два разных запроса вам нужно использовать два разных объекта $model например так:
$model = new \App\Item;

if($value = $request->get('value'))
    $model = $model->where('title', 'like', '%'.$value.'%');

$paramsecheckedModel = clone $model;
$params = $model->whereNotIn('id', $ids)->orderBy('title', 'asc')->get();
$paramschecked = $paramsecheckedModel->whereIn('id', $ids)->orderBy('title', 'asc')->get();

$query = $model->toSql();
$query2 = $paramsecheckedModel->toSql();
dd([$query, $query2]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы