无法使用Eloquent的hasManyThrough来为一个基本的例子工作

时间:2015-02-08 01:01:48

标签: php laravel eloquent

以下是我的关系:

User

  • ID

Collection

  • ID

UserCollection

  • USER_ID
  • collection_id

如何获得$user->collections之类的内容来返回属于该用户的所有Collection个对象? UserCollection只是将UserCollection相关联。这允许用户拥有多个集合,但也允许集合属于多个用户。

我目前正在尝试的是指定UserCollection属于User上的user_id,属于Collection上的collection_id

// UserCollection

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

public function collection()
{
    return $this->belongsTo(Collection::class, 'collection_id');
}

然后指定User有多个CollectionsUserCollection

// User

public function collections()
{
    return $this->hasManyThrough(Collection::class, UserCollection::class);
}

我还尝试明确设置hasManyThrough关系的列名,但是联接尝试使用id模型上的UserCollection列,该列不存在因为没有主键:

public function collections()
{
    return $this->hasManyThrough(Collection::class, UserCollection::class, 'user_id', 'collection_id');
}

1 个答案:

答案 0 :(得分:2)

你在这里过分复杂。你不需要hasManyThrough。对于多对多关系,您需要belongsToMany()

首先,摆脱你的UserCollection模型。你不需要它。

然后将你的关系改为:

public function collections(){
    return $this->belongsToMany('Collection', 'user_collections');
}

public function users(){
    return $this->belongsToMany('User', 'user_collections');
}

有关详细信息,请查看official docs on relations