查询数据库时使用Eloquent模型方法

时间:2016-03-12 15:14:00

标签: php database performance laravel eloquent

使用名为Foo的Eloquent模型,包括一个名为bar的方法,在查询数据库时,我可以从另一个函数baz使用bar吗?否则,我必须为baz返回的每个对象调用bar

我想做这样的事情:

class Foo extends Model
{
    public function bar
    {
        return Bar::where('foo_id', $this->id)->sum('amount');
    }

    public function baz
    {
        return self::where('col', true)->with('bar')->take(5);
    }
}

2 个答案:

答案 0 :(得分:0)

当然可以,但最好是使用范围。这就是定义范围的方法。

public function scopeBaz($query)
{
    return $query->where('col', true)->with('bar')->take(5);
}

答案 1 :(得分:0)

您可以使用Eloquent query scopes

class Foo extends Model
{
    public function scopeBar($query)
    {
        return $query->where('foo_id', $this->id)->sum('amount');
    }

    public function baz
    {
        return Bar::where('col', true)->bar()->take(5);
    }
}

此外,您可以在控制器和其他类中使用bar(),而不仅仅是在模型中。