Laravel 5.3全局作用域在执行其他查询时死亡

时间:2016-12-27 13:33:37

标签: php laravel laravel-5

我需要为很多模型添加一个全局范围(我将它放入特征中),这将检查是否\Session::has('admin')如果是,它将查询'admins'表,得到' main_website'此管理员所属并且仅显示属于此网站的结果。

问题是全局范围在我开始执行另一个查询后死亡,并且在我的日志中没有任何内容时出现错误500.

这是特征:

trait MainWebsitable {

    public static function bootMainWebsitable()
    {
        static::addGlobalScope(new MainWebsitableScope);
    }

    public function mainWebsites()
    {
        return $this->morphToMany(MainWebsite::class, 'main_websitable');
    }

    public function scopeByWebsiteId($query, $id)
    {
        return $query->whereHas('mainWebsites', function ($query) use ($id) {
            $query->where('id', $id);
        });
    }
}

以下是全球范围:

class MainWebsitableScope implements Scope {
    public function apply(Builder $builder, Model $model) {
        if(\Session::has('admin')) {
            $adminId    = \Session::get('admin');
            $admin      = Admin::find($adminId);
            $website    = $admin->mainWebsites->first();
            if(isset($website)) {
                $builder->byWebsiteId($website->id);
            }
        }
    }

}

我尝试先将dd(\Session::get('admin'))放在第一位,然后成功返回会话中保存的值。然后我尝试在Admin::find($adminId)之后放入dd($ admin)并返回相同的500错误,好像我没有dd()。我也尝试在那个地方做另一个查询(不是查询Admin模型,但是其他一些表),同样的事情发生了 - 500错误,没有解释。

以下是nginx日志:http://pastebin.com/1EX4aRvV

我做错了什么?

0 个答案:

没有答案