Laravel - 相同的模型通过另一个相关

时间:2014-09-01 20:00:25

标签: php laravel laravel-4 eloquent

我无法在此找到相应的文档。

我有一个User模型,每个User可以与Site建立多对多的关系。我试图找出如何获得User之间的关系。

例如,一个User可能是Site所有者,另一个可能是Client。如果我拥有所有者对象,我该如何检索与所有Client相关联的Site数组。

我尝试过使用

public function clients() {
    return $this->hasManyThrough('User', 'Site');
}

然而,这仍然会返回我无法过滤掉的当前用户。

我不确定我的模特是否错了,例如需要拥有所有者和客户端模型,这两者都扩展了通用用户。

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 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();

希望这能让你朝着正确的方向前进(远离创建更多模型,试图找出继承,处理工厂模式等等)。有时解决方案很简单,根据我的经验 - 当你开始过度复杂化模型时(以这种方式),你的数据库设计很可能出现问题。