我在使用laravel中的一段代码时遇到了一些麻烦。我有一个SecuredEloquent课程,我所有的'安全'模特延伸。它所做的只是在我覆盖的newQuery函数中为查询添加一个whereHas子句:
class SecuredEloquent extends Eloquent
{
public function newQuery($excludeDeleted = true)
{
$query = parent::newQuery($excludeDeleted);
$context = App::make('Wall\Context\Context');
$query->whereHas('permissions', function($q) use ($context)
{
$q->where('context_id','=',$context->id());
$q->where('level','>=', $context->level());
});
return $query;
}
}
问题:它不起作用。我得到"连接被重置"浏览器中的错误和日志中没有任何内容:(任何人都知道我做错了什么?
EDIT2: MyModel扩展了SecuredEloquent,OtherModel没有
当我尝试在工匠修补工具中运行时,没有任何反应。 的var_dump(为MyModel ::所有());只是停止进程(崩溃?不知道,再没有记录,只是退出) 的var_dump(OtherModel ::所有());但是只是工作
修改
我有ContextServiceProvider:
use Illuminate\Support\ServiceProvider;
class ContextServiceProvider extends ServiceProvider
{
/**
* Register
*/
public function register()
{
$this->app->singleton('Wall\Context\Context', function($app)
{
return new AppContext;
});
}
}
使用AppContext:
use Illuminate\Database\Eloquent\Model;
class AppContext
{
/**
* The current context
*
* @var Illuminate\Database\Eloquent\Model
*/
protected $context;
/**
* The current context level
*
* @var int
*/
protected $level;
/**
* Check to see if the context has been set
*
* @return boolean
*/
public function has()
{
if($this->context) return true;
return false;
}
/**
* Get the context identifier
*
* @return integer
*/
public function id()
{
if ( $this->has() ) return $this->context->id;
return 0;
}
/**
* Get the context permission leven
*
* @return string
*/
public function level()
{
if ( $this->level ) return $this->level;
return 1;
}
}
希望这有帮助