2016-02-14 195 views
0

我配置了5个模型。客户,环境,对象,ServiceRole和服务。我已经在每个模型中建立了合适的雄辩关系。Laravel 5.1与一对多和多对多模型的远程关系

客户有很多环境。

//Customer Model  
public function environments() 
{ 
return $this->hasMany('App\Environment'); 
} 

环境属于一个客户。
环境属于许多对象。

//Environment Model 
public function customer() 
{ 
    return $this->belongsTo('App\Customer'); 
} 

public function objects() 
{ 
    return $this->belongsToMany('App\Object'); 
} 

对象属于许多环境。
对象属于许多ServiceRoles。

//Object Model 
public function environments() 
{ 
    return $this->belongsToMany('App\Environment'); 
} 

public function serviceRoles() 
{ 
    return $this->belongsToMany('App\ServiceRole'); 
} 

ServiceRoles属于许多对象。
ServiceRoles属于一个Service。

//ServiceRole Model 
public function objects() 
{ 
    return $this->belongsToMany('App\Object'); 
} 

public function service() 
{ 
    return $this->belongsTo('App\Service'); 
} 

服务属于许多ServiceRoles。

public function serviceRoles() 
{ 
    return $this->hasMany('App\ServiceRole'); 
} 

--SQL--
客户:ID,名称
对象:ID,名称
环境:ID,姓名,CUSTOMER_ID
environment_object:ID,environment_id ,object_id
service_roles:id,name,service_id
object_service_role:ID,OBJECT_ID,service_role_id
服务

1)什么是检索所有相关的客户对象的最简单的方法(在所有相关的ID,名称环境)?

希望做的是这样的:$客户 - >对象

2)我怎样才能然后检索相关的客户对象的所有的服务,为每个对象都有映射到服务ServiceRole 。

希望做的是这样的:$客户 - >服务

+0

道歉,我已经添加了模型和修改了我的第二个问题稍微反映另一模型,我错过了。谢谢 – kayex

回答

0

这将是很好的张贴所有的关系。但如果你说你有适当的建立你的关系,那么以下应该工作。

1. Customer::with('environments.objects')->get(); 

,但如果只有一个客户做

Custmer::with('environments.objects')->find($id); 


2. Customer::with('environments.objects.roles')->get(); 

只有一个客户做

Customer::with('environments.objects.roles')->find($id); 
+0

这似乎检索嵌套集合,我必须循环。有没有办法只检索“对象”和“服务”?我还添加了我的模型,并澄清了我的第二个问题,因为我对整体db设计不太清楚。谢谢! – kayex