2017-07-04 59 views
1

我有标题为中间表hasManyThrough - 不返回正确的数据

app_services

它包括以下栏:

  • app_service_id(PK)
  • APP_ID(FK )
  • service_id(FK)

最后的表是服务表:

服务

  • 的service_id(PK)
  • 服务名
  • service_icon

我想上app_services一个hasManyThrough 。但是,它的返回错误的结果..

对于APP_ID = 1它有1 & 3.业务ID,但它返回回的service_id的PF 1 & 4.

在我app_model我定义的关系如下:

public function services() 
{ 
    return $this->hasManyThrough(
     'App\Service', 'App\AppService', 
     'service_id', 'service_id', 'app_id' 
    ); 
} 

现在看起来对我有好处吗?有人会检查它是否正确。

谢谢!

回答

1
public function services() 
{ 
    return $this->belongsToMany('App\Service'); 
} 

现在,随着关系的这种声明Laravel“假设”认为数据透视表名称遵循的规则,是app_service.But,如果它实际上是不同的(例如,它的复数形式),你可以将它作为第二参数:

public function services() 
    { 
     return $this->belongsToMany('App\Service','app_services'); 
    } 

“app_services”是一个中间表的名称

此外,你可以指定数据透视表的实际字段名,如果他们比默认APP_ID和service_id为不同。然后,只需再添加两个参数 - 第一,目前的模式字段,然后接合

public function services() 
{ 
     return $this->belongsToMany('App\Service','app_services','app_id','service_id'); 
} 

模型的领域现在,使用您可以检索的数据

$app = App::find($app_id); 
$app->services(); 
+0

嗨这种关系,所以你会把这些放在每个模型上?或者在应用模型中的一个模型 – StuBlackett

+1

中,您必须使用decklare服务功能,并且在服务模型中,您可以声明应用模型 –

+1

以获取更多信息,您可以访问http://laraveldaily.com/pivot-tables-and-many-to-many -relationships/ –