Laravel全球范围和加入

时间:2015-08-06 15:45:36

标签: php laravel laravel-5 laravel-5.1

我在Laravel 5.1中设置了全局范围,但工作正常。但是在我的一些页面上,我使用Eloquent构建器使用MySQL <?php namespace App\Scopes; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\ScopeInterface; use App\Customers; use DB, Session; class MultiTenantScope implements ScopeInterface { /** * Create a new filter instance. * * @param UsersRoles $roles * @return void */ public function __construct() { $this->custId = Session::get('cust_id'); } /** * Apply scope on the query. * * @param Builder $builder * @param Model $model * @return void */ public function apply(Builder $builder, Model $model) { if($this->custId) { $builder->whereCustId($this->custId); } else { $model = $builder->getModel(); $builder->whereNull($model->getKeyName()); } } /** * Remove scope from the query. * * @param Builder $builder * @param Model $model * @return void */ public function remove(Builder $builder, Model $model) { $query = $builder->getQuery(); $query->wheres = collect($query->wheres)->reject(function ($where) { return ($where['column'] == 'cust_id'); })->values()->all(); } } 。这导致了一个模棱两可的错误:

{{1}}

我不确定如何避免这个问题。我知道我可以使用子查询,但是没有其他解决方案吗?

这是我的范围文件:

{{1}}

1 个答案:

答案 0 :(得分:12)

为了消除字段的歧义,您应该将表名添加为前缀:

public function apply(Builder $builder, Model $model)
{
    if($this->custId) 
    {
        $fullColumnName = $model->getTable() . ".cust_id";
        $builder->where($fullColumnName, $this->custId); 
    } 
    else 
    {
        $model = $builder->getModel();
        $builder->whereNull($model->getKeyName()); 
    }
}
相关问题