2017-07-04 123 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/ –