2014-09-01 100 views
0

我无法找到相应的文档。Laravel - 通过另一个相关模型

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

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

我使用

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

然而,这仍然返回该我无法筛选出当前用户尝试。

我不确定我的模特是否有错,例如,需要拥有一个Owner和一个Client模型,它们都扩展了一个通用用户。

任何帮助,将不胜感激。

谢谢。

+0

如何知道用户是所有者还是客户?你将这些信息存储在用户表中吗?不过,我不确定'hasManyThrough'方法在这里是否合适,毕竟你没有中间关系。我宁愿使用'belongsToMany',如下所示:http://laravel.com/docs/eloquent#many-to-many – Adrenaxus 2014-09-02 12:49:45

回答

1

您的模型可能很好。您正在使用多对多关系,因此指定该关系类型的好地方应该是同一个表 - 数据透视表。

users 
    id 
    name 

sites 
    id 
    url 

site_user 
    site_id 
    user_id 
    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(); 

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

+0

这看起来正是我需要的,一个简单的问题,我如何在保存时指定类型联想?谢谢 – SteveEdson 2014-09-02 17:33:04

+0

$ user-> sites() - > attach($ site_id,array('type'=>'client')); – 2014-09-02 18:14:42

+1

之前,该用户需要保存... – 2014-09-02 18:15:32

相关问题