以下是我的关系:
User
Collection
UserCollection
如何获得$user->collections
之类的内容来返回属于该用户的所有Collection
个对象? UserCollection
只是将User
与Collection
相关联。这允许用户拥有多个集合,但也允许集合属于多个用户。
我目前正在尝试的是指定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
有多个Collections
到UserCollection
。
// 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');
}
答案 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