我正在Laravel中创建一个项目,每个公司都有很多部门......每个部门都有一定数量的位置,每个位置都有指定的设备!
由于可能有不同的公司使用这个平台,我创建了一个全局范围,基本上通过company_id
过滤结果:
class CompanyScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
return $builder->where('company_id', auth()->user()->company_id);
}
}
这一切都很好,它过滤正确,直到我试图实现以下内容:
Departments::withCount(['locations','devices'])->get();
此时,我得到一个错误,说列company_id
是不明确的..这是因为表departments
,location
和devices
都有一个列company_id
,并且在使用范围时的最终查询没有指定表名。
有没有办法将表名添加到作用域条件中?
2条答案
按热度按时间rggaifut1#
如果你想在Scope中指定表,你可以简单地执行
$model->getTable()
:uklbhaso2#
从Laravel 5.5开始,你也可以在
qualifyColumn
方法中使用这种稍微流畅的语法。