Объединить два ограничения Laravel Builder, которые в предложении OR, а не в AND - PullRequest
0 голосов
/ 26 октября 2018

Что у меня есть: 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;
}
  1. Итак, Laravel объединяет эти два запроса с предложением AND.

вопрос: Как объединить эти два запроса с предложением ИЛИ? экран $builder->toSql() и $builder->getBindings() прилагаются.

enter image description here

...