我无法在此找到相应的文档。
我有一个User
模型,每个User
可以与Site
建立多对多的关系。我试图找出如何获得User
之间的关系。
例如,一个User
可能是Site
所有者,另一个可能是Client
。如果我拥有所有者对象,我该如何检索与所有Client
相关联的Site
数组。
我尝试过使用
public function clients() {
return $this->hasManyThrough('User', 'Site');
}
然而,这仍然会返回我无法过滤掉的当前用户。
我不确定我的模特是否错了,例如需要拥有所有者和客户端模型,这两者都扩展了通用用户。
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:1)
你的模型可能很好。您使用的是多对多关系,因此指定该关系类型的好地方就是同一个表 - 数据透视表。
users
id
name
sites
id
url
site_user
site_id
user_id
type
其中type是例如字符串所有者或客户端。
class User extends Eloquent {
public function sites() {
return $this->belongsToMany('Site')
->withPivot('type');
}
}
class Site extends Eloquent {
public function users() {
return $this->belongsToMany('User')
->withPivot('type');
}
// you can use something like this
public function clients(){
return $this->users()->wherePivot('type', 'client');
}
}
一旦拥有了您想要的网站,您就可以获得这样的客户
$clients = $site->clients()->get();
希望这能让你朝着正确的方向前进(远离创建更多模型,试图找出继承,处理工厂模式等等)。有时解决方案很简单,根据我的经验 - 当你开始过度复杂化模型时(以这种方式),你的数据库设计很可能出现问题。