Laravel为模型添加功能

Pat*_*ick 0 php model ruby-on-rails laravel eloquent

我想在Laravel模型中添加一个函数,就像我在Rails中习惯的那样.

例如:

class Person < ActiveRecord::Base
    def name
        "#{firstname} #{lastname}"
    end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试在Laravel中使用相同的方法时,我得到以下异常:

Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation
Run Code Online (Sandbox Code Playgroud)

我如何在Laravel中获得这种行为?

Mar*_*ker 5

使用方法名称getXXXAttribute在模型中创建一个Accessor:

class Person extends Eloquent {

    public function getNameAttribute($value)
    {
        return $value->firstname . ' ' . $value->lastname;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用在模型中引用它

$person->name
Run Code Online (Sandbox Code Playgroud)

如果要使用full_name这样的名称,请注意蛇案例/驼峰案例差异:在方法名称中使用camel case

class Person extends Eloquent {

    public function getFullNameAttribute($value)
    {
        return $value->firstname . ' ' . $value->lastname;
    }

}
Run Code Online (Sandbox Code Playgroud)

但是当你需要访问它时需要蛇盒

$person->full_name
Run Code Online (Sandbox Code Playgroud)