关系方法必须从模型调用返回一个类型为Illuminate\Database\Eloquent\Relations\Relation的对象,而不是在Laravel 4中查看

kai*_*rra 5 php laravel eloquent laravel-4

我有一个模型,Ability,属于另一个模型AbilityType.

    <?php
class Ability extends Eloquent {

    public function abilityType() {
        return $this->belongsTo('AbilityType');
    }

    public function name() {
        return $this->abilityType->name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以成功在我的刀片模板中进行此调用:

$ability->abilityType->name
Run Code Online (Sandbox Code Playgroud)

但是当我在我的Ability模型中进行相同的调用时,它会引发异常:

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

动态属性在视图和模型层之间的行为是否不同?我在这里错过了什么?

Jos*_*ber 7

Laravel使用特殊getFooAttribute语法来加载动态属性:

class Ability extends Eloquent {

    public function abilityType ()
    {
        return $this->belongsTo('AbilityType');
    }

    public function getNameAttribute ()
    {
        return $this->abilityType->name;
    }

}
Run Code Online (Sandbox Code Playgroud)