hasManyThrough - 不返回正确的数据

时间:2017-07-04 10:01:00

标签: php laravel eloquent

我有一个名为

的中间表

app_services

它由以下列组成:

  • app_service_id(PK)
  • app_id(FK)
  • service_id(FK)

最终表是服务表:

服务

  • service_id(PK)
  • 服务名
  • service_icon

我在app_services上尝试使用hasManyThrough。但它返回了错误的结果..

对于app_id = 1,它的服务ID为1&但它正在返回service_id的pf 1& 4。

在我的app_model中,我按如下方式定义关系:

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

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

谢谢!

1 个答案:

答案 0 :(得分: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();