我需要为很多模型添加一个全局范围(我将它放入特征中),这将检查是否\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
我做错了什么?