Определить тип оператора DML при использовании Global Scopes (Laravel / Eloquent)

Я хочу использовать 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?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]