Добавление дополнительных запросов к whereHas - PullRequest
0 голосов
/ 28 марта 2019

Я выбираю все трансляции, которые принадлежат той же организации, что и аутентифицированный пользователь, это прекрасно работает с ->whereHas(), но что если я хочу добавить фильтр, чтобы отображать только broadcasts, где is_published равно true.

public static function indexQuery(NovaRequest $request, $query)
{
    if (Auth::user()->isAdmin()) {
        return $query;
    }else{
        return $query->whereHas('organizations', function($q){
            $q->where('organization_id', Auth::user()->organization_id);
        });
    }
}

модели

public function organizations()
{
    return $this->belongsToMany('App\Models\Organization');
}

public function broadcasts()
{
    return $this->belongsToMany('App\Models\Broadcast');
}

1 Ответ

2 голосов
/ 28 марта 2019

Вы можете добавить область запроса к вашей модели Broadcast, которая будет запрашивать только broadcasts, где is_published равно true (Это подходит для будущих запросов в вашем приложении, где вам нужны опубликованные трансляции):

Broadcast.php (или файл модели)

public scopePublished($query)
{
    return $query->where('is_published', true);
}

Затем в вашем коде и в поле ->published() вашего запроса:

public static function indexQuery(NovaRequest $request, $query)
{
    if (Auth::user()->isAdmin()) {
        return $query;
    } else {
        return $query->published()
            ->whereHas('organizations', function($q){
                $q->where('organization_id', Auth::user()->organization_id);
            });
    }
}
...