Задать вопрос
@alex--n

Как использовать один билдер запросов с разными параметрами?

Добрый день. Есть большой билдер запросов, который собирается из нескольких запросов. Этот же запрос надо использовать несколько раз, но с разными параметрами. Но никак не могу найти способ вставки разных параметров.
Пример очень грубый:
$query = Client::join('emails', 'emails.client_id', '=', 'clients.id')
->whereIn('email', ['a@a.a', 'b@b.b'])
->get();

Мне нужно использовать этот же запрос, но вместо ['a@a.a', 'b@b.b'], нужны другие почты. Не хотелось бы, чтобы билдер каждый раз собирался заново. Использовать один запрос не могу, т.к. от каждого запроса зависит, будет ли он проверять предыдущие почты или нет.
Хотелось бы что-то плана:
$query = Client::join('emails', 'emails.client_id', '=', 'clients.id')
->whereIn('email', ':arr']);
foreach($cs as $c){
$res = $query->setVars(':arr' => ['a@a.a', 'b@b.b'])->get()
}

Возможно это немного надуманно), но каждый раз собирать запрос думаю хуже
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@miki131
Простого способа нет.
Можете попробовать так
$builder = function($params) {
	return Client::join('emails', 'emails.client_id', '=', 'clients.id')->whereIn('email', $params]);
}

foreach($cs as $c){
	$res = $builder(['a@a.a', 'b@b.b'])->get();
}
Ответ написан
Комментировать
@2vtlk
Как вариант делаем билдер с основным запросом:
$builder = SomeModel::query()->where('....', '......')->.... ;

а для повторного использования юзаем так сколько угодно раз:
with(clone $builder)->where('....', '.....');
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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