Laravel 4 - 是否可以扩展DB类?

时间:2013-05-25 19:11:21

标签: orm laravel fluent laravel-4

*请注意,这是关于Laravel 4的问题,而不是Laravel 3(使用Fluent)

是否可以在Laravel 4中扩展DB类?

我尝试过这么简单的事情:

class Content extends DB {}

在我的路线中有这个:

print_r(Content::table('content')->get());

它似乎可以使用像“DB”这样的“内容”。

但是,如果我尝试默认设置表名,类似于你在Eloqeunt中的方式,并使用where或join等函数,我会得到如下错误:

print_r(Content::where('id', '!=', 4)->get());

将此作为错误:

  

call_user_func_array()期望参数1是有效的回调,   class'Linuminate \ Database \ MySqlConnection'没有方法   '其中'

有效的我想做的就是这样。因此,我可以添加一个函数,它可以执行多个连接/位置,但是将它集成到使用DB的正常流程中。所以课程看起来像这样:

class Content extends DB {
    public $table = 'content';

    public static function joinPermissions($permission_mask)
    {
        return self::where('permissions.mask', '=', $permission_mask)
            ->where('permissions.read', '=', 1)
            ->join('permissions', 'id', '=', 'content.permission_set');
    }
}

它会像这样调用:

Content::orderBy('time_added')
    ->take(10)
    ->joinPermissions($permission_mask)
    ->get();

这可能吗?我想这与需要扩展DB以外的其他类有关,因为DB在使用DB :: table();时会返回其他内容。但是我真的很难跟随Laravel中的代码并发现正在发生的事情,它似乎与照亮有关,但说实话我不确定那是什么。我也试着看Eloquent看看它是怎么做到的,但我再次发现Laravel很难环顾四周并了解发生了什么。

1 个答案:

答案 0 :(得分:2)

尝试使用Eloquent和scopes

class Content extends Eloquent {
    public $table = 'content';

    public function scopeJoinPermissions($query, $permission_mask)
    {
        return $query->where('permissions.mask', '=', $permission_mask)
            ->where('permissions.read', '=', 1)
            ->join('permissions', 'id', '=', 'content.permission_set');
    }
}

Content::orderBy('time_added')
    ->take(10)
    ->joinPermissions($permission_mask)
    ->get();