Laravel模型,全局过滤器

时间:2014-11-21 22:22:27

标签: php laravel-4 eloquent

我真的不想重写Eloquent来做这件事,而且它足够强大,没有它就可以实现。

无论如何,我正在开发一个使用子域表的云样式应用程序。数据库中的每个表都引用此表来将数据过滤到每个子域中(所有子域都使用相同的数据库)。

所以这通常意味着我需要调用数据的任何地方,我需要应用$model->where('site_id','=',CURRENT_SUBDOMAIN_ID);

那么无论如何在Eloquent中添加类似的东西?仍在学习Laravel但尚未找到任何相关信息。

App::before(function($request)
{
    $host = $request->getHost();
    $parts = explode('.', $host);
    $subdomain = $parts[0];

    if($subdomain!='main'){
        $site_settings = DB::table('sites')->where('subdomain',$subdomain)->first();
        if(!$site_settings){ //find out a better way to do a 404 or redirect
            return Redirect::to('http://testing.app:8000/login');
        }
        Config::set('request.site_name', $site_settings->subdomain);
        Config::set('request.site_params', json_decode($site_settings->params));
        Config::set('request.site_id', $site_settings->id);
    }
});

这就是我如何确定客户端当前所处的子域名,通过它我有一个site_id的全局,最后一步基本上适用于模型。

此外,每个型号都有以下内容:

public function site()
{
    return $this->belongsTo('\Site');
}

1 个答案:

答案 0 :(得分:0)

当我找不到这个时,我正在思考错误的方法,它不是laravel的全局过滤器,它是一个范围。

Global filtering - how to use global scope in Laravel Eloquent

laravel以创新的方式做的事情之一,似乎与你习惯的有点不同。伟大但令人兴奋。