*请注意,这是关于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很难环顾四周并了解发生了什么。
答案 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();