Пожалуйста, посмотрите в этот код, здесь я добавил whereHas вместо где.поэтому он будет принимать только совпадающие записи в пользовательской таблице для нужной зоны.
надеюсь, это поможет ..
$query = QueryBuilder::for(ImageRequest::class)
->with(['requestTypes'])
->whereHas('user'=>function($q){
$q->where('zone', Auth::user->zone);
})
->allowedIncludes('requestTypes')
->orderByRaw("FIELD(status , 'new') desc")
->orderBy('functional_id', 'asc')
->allowedFilters(
'id',
'pv_number',
'created_at',
Filter::scope('starts_between'),
'location_of_facts',
'train_nr',
'status',
'result_of_search',
Filter::custom('type', RequestTypeFilter::class));
Пожалуйста, попробуйте это, использовал запрос прямого соединения.
$query = ImageRequest::selectRaw('column1,column2')
->join('user', function($join){
$join->on('ImageRequest.user_id','=','user.id');
})
->leftJoin('request_types', function($join){
$join->on('request_types.image_request_id','=','image_request.id')
})
->where('user.zone', Auth::user->zone)
->orderByRaw("FIELD(status , 'new') desc")
->orderBy('functional_id', 'asc')
->allowedFilters(
'id',
'pv_number',
'created_at',
Filter::scope('starts_between'),
'location_of_facts',
'train_nr',
'status',
'result_of_search',
Filter::custom('type', RequestTypeFilter::class)
);