0

*注意这是关于 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 是一个有效的回调,类 'Illuminate\Database\MySqlConnection' 没有方法 'where'

实际上,我想做的是这样的事情。由此我可以添加一个函数,该函数执行多个连接/位置,但将其集成到使用 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::table(); 时,DB 返回其他内容。但是我真的很难遵循 Laravel 中的代码并找出发生了什么,这似乎与照亮有关,但老实说我不太确定那是什么。我也尝试查看 Eloquent 以了解它是如何做到的,但我再次发现 Laravel 很难环顾四周并理解发生了什么。

4

1 回答 1

2

尝试使用 Eloquent 和范围

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();
于 2013-05-25T22:07:49.347 回答