Что у меня есть:
1. хранилище с методом $this->forTeam()
, используемым для запроса области, чтобы выбрать данные для команды. вернуть Eloquent \ Builder:
/**
* Retrieve Unit Activities for specific team + all Unit Activities for Units that belong to Team
*
* @param Team $team
* @return mixed
*/
public function forTeam(Team $team)
{
$unitsIds = $team->units()->pluck('id')->toArray();
$unitGroupsIds = $team->unitGroups()->pluck('id')->toArray();
return \App\UnitActivity::where(function ($query) use ($unitsIds, $team, $unitGroupsIds) {
$query->where(function ($query) use ($unitsIds) {
$query->where('executable_type', Unit::class)
->whereIn('executable_id', $unitsIds);
})->orWhere(function ($query) use ($team) {
$query->where('executable_type', Team::class)
->where('executable_id', $team->id);
})->orWhere(function ($query) use ($unitGroupsIds) {
$query->where('executable_type', UnitGroups::class)
->whereIn('executable_id', $unitGroupsIds);
});
});
}
2. мой новый метод в хранилище выше, в котором я пытаюсь повторно использовать $this->forTeam()
, чтобы сохранить СУХОЙ:
/**
* Retrieve Unit Activities for multiple teams + all Unit Activities for Units that belong to Team
*
* @param Team $team
* @return mixed
*/
public function forTeams(Collection $teams): Builder
{
$builder = \App\UnitActivity::query();
$teams->each(function ($team) use (&$builder) {
$builder = $builder->mergeConstraintsFrom($this->forTeam($team));
});
return $builder;
}
- Итак, Laravel объединяет эти два запроса с предложением AND.
вопрос:
Как объединить эти два запроса с предложением ИЛИ?
экран $builder->toSql()
и $builder->getBindings()
прилагаются.
![enter image description here](https://i.stack.imgur.com/Prcri.png)