Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm Laravel 4-是否可以扩展DB类?_Orm_Laravel_Fluent_Laravel 4 - Fatal编程技术网

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

Orm Laravel 4-是否可以扩展DB类?,orm,laravel,fluent,laravel-4,Orm,Laravel,Fluent,Laravel 4,*注意:这是一个关于Laravel 4的问题,而不是Laravel 3(使用Fluent) 是否可以在Laravel 4中扩展DB类 我试过这么简单的方法: class Content extends DB {} 在我的路线上: print_r(Content::table('content')->get()); 就使用“DB”这样的“内容”而言,它似乎是可行的 但是,如果我尝试在默认情况下将表名设置为类似于您在eLoqount中使用where或join等函数的方式,则会出现如下错误:

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

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

我试过这么简单的方法:

class Content extends DB {}
在我的路线上:

print_r(Content::table('content')->get());
就使用“DB”这样的“内容”而言,它似乎是可行的

但是,如果我尝试在默认情况下将表名设置为类似于您在eLoqount中使用where或join等函数的方式,则会出现如下错误:

print_r(Content::where('id', '!=', 4)->get());
将此作为错误:

call\u user\u func\u array()要求参数1为有效回调, 类“Illumb\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中的代码并找到发生了什么,这似乎与Illumb有关,但老实说,我不确定这是什么。我也试着看一下Eloquent,看看它是如何做到的,但我还是觉得Laravel很难环顾四周,理解发生了什么。

尝试使用Eloquent和:


DB方法(如“where”、“join”等)是Illumb\Database\Query命名空间中构建器类的一部分,而不是DB类。你到底想做什么?可能有一种比扩展进行数据库交互的类更好的方法。一般来说,我会在使用函数的模型中添加“some_extra_function()”。@AdamWathan我已经更新了示例以进行更多解释。我基本上希望在使用DB的一般流程中包含函数,而不是必须编写单独的函数,例如getWithPermissions(),听起来像是您想要扩展的生成器类,应该能够在其中添加这些方法。我不确定我是否完全理解您试图做的事情,因此我无法提出更好的方法,但我仍然认为用非常具体的行为扩展该类可能不是真正的最佳解决方案。你是打算用雄辩的语言来使用这些东西,还是仅仅使用DB组件,做一些更“原始”的事情?“内容”类应该代表什么?基本上,当我从数据库获取内容时,我经常需要“加入权限”(比如阅读论坛主题的权限)最好只有一个函数来完成,而不是总是写where/join的东西。我试图避免ORM的成本,因为我需要实现的功能在没有ORM的情况下可以完成99%,引入雄辩似乎很愚蠢,这样我就可以在函数中加入重复的代码,而不是每次都单独进行。我试着看看雄辩是如何工作的,看看它是如何扩展DB的,但我正在努力通过Laravel codebaseDave的正确想法。您不能扩展DB类,然后分配一个默认表,如果希望能够转到Content::where(),则需要转到Content::table('Content')->where()。。。您提出的语法正是Dave实现的工作方式。扩展DB类将不允许使用您建议的语法。
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();