Я хочу использовать Eloquent Global Scope, который добавит соединение к каждому запросу select для некоторых моделей. Проблема, с которой я сталкиваюсь, заключается в том, что соединение также добавляется в другие операторы, например, UPDATE, что делает запрос недействительным.
Основная идея функциональности, которую я хочу, заключается в том, что после входа в систему некоторые модели будут возвращать только те данные, к которым имеет доступ зарегистрированный пользователь (прозрачно для разработчика, поскольку это объединение будет добавлено в фоновом режиме с использованием глобальных областей и признаков).
Таким образом, вместо того, чтобы использовать что-то вроде User :: available () -> get (), я бы хотел использовать User :: get (), а «доступная» область должна быть добавлена глобально, основываясь на некоторых условиях …
Это метод применения ScopeInterface:
public function apply(Builder $builder)
{
$table = $builder->getModel()->getTable();
$companyLevel = $builder->getModel()->_getCompanyLevel();
//I would like to detect if this is a SELECT query here, somehow...
if ($companyLevel !== null) {
$columns = $builder->getQuery()->columns;
//if all columns or no specified columns
if((count($columns)==1 && $columns[0]=='*') || count($columns)==0) {
$builder->getQuery()->select([$table.'.*']);
}
$builder->getQuery()
->join('spaces',$table.'.space_id','=','spaces.id')
->where('spaces.level','>',$companyLevel);
}}
Любые идеи о том, как обнаружить запрос SELECT?
Задача ещё не решена.
Других решений пока нет …