我想使用一个 Eloquent 全局范围,它将为某些模型的每个选择查询添加一个连接。我面临的问题是连接也被添加到其他语句中,例如 UPDATE,这使得查询无效。
我想要的功能的主要思想是,登录后,某些模型将仅返回登录用户有权访问的数据(对开发人员透明,因为此连接将通过使用全局范围和特征在后台添加)。
因此,我不想使用 User::accessible()->get() 之类的东西,而是想使用 User::get() 并且应该根据某些条件在全局范围内添加“可访问”范围......
这是 ScopeInterface 的 apply 方法:
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 查询的任何想法?