Laravel Relationship错误尝试调用模型中的关系

时间:2014-06-01 07:03:54

标签: laravel laravel-4 eloquent

在Laravel“4.1.x-dev”,

如何在模型中的关系上调用方法?从以下示例

public function userLink() {
  return $this->user->link;
} 

我的功能userLink给了我错误:Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation

还有另一种方法可以让我通过某种急切的加载技巧从Drawing访问链接用户吗?

enter image description here

我有几种不同类型的用户。每种类型的用户都拥有自己的表格,每个表格中的 ID 对应用户表格的* ID **。在我的Users模型中,我有一个名为''link''的方法,它执行''morphTo''并获得正确的用户对象。

class Drawing extends Eloquent {
    public function user() {
        return $this->belongsTo('User', 'user_id');
    }

    // this throws the relation error above, also I beleive this does two queries, anyway to improve this?
    public function userLink() {
        return $this->user->link;
    }
}

class User extends Eloquent {
    public function link() {
        return $this->morphTo('User', 'type', 'id');
    }
}

class Retailer extends Eloquent {
    public function user() {
        return $this->belongsTo('User', 'id');
    }
}

class Manufacturer extends Eloquent {
    public function user() {
        return $this->belongsTo('User', 'id');
    }
}

1 个答案:

答案 0 :(得分:3)

请改为尝试:

Drawing::first()->user->link;

或者这个:

// Drawing model
public function user()
{
    return $this->belongsTo('User', 'user_id');
}

// Drawing model
// Requires above relation
public function userLink()
{
    return $this->user->link;
}

然后:

$ulink = Drawing::first()->userLink();

同时检查Defining An Accessor

更新:只需对此方法进行更改(创建accessor):

public function getUserLinkAttribute()
{
    return $this->user->link;
}