2016-05-13 38 views
0

我繼承4 MySQL表:雄辯belongsToMany withPivot映射

上市
-id
-description
...

位置
-id
-listing_id

導軌
-id
-name
....

guide_location
-id
-guide_id
-location_id

清單=>(許多)的地點
指南=>(許多)地點=>(1)代碼

列表,位置和指南在Laravel Dingo應用程序中都是它自己的模型。這裏的設置:

//Listing model 
public function locations() 
{ 
    return $this->hasMany('Location'); 
} 

然後

//Location model 
public function guides() 
{ 
    return $this->belongsToMany('Guide'); 
} 
public function listing() 
{ 
    return $this->belongsTo('Listing'); 
} 

而且

//Guide model 
public function locations() 
{ 
    return $this->belongsToMany('Location'); 
} 

我添加了一個列guide_location,我想返回,當我從選擇指南數據庫。

所以現在:

guide_location
-id
-guide_id
-location_id
- 位

我嘗試添加->withPivot('position')的指南和車型定位在兩個belongsToMany()聲明但它不起作用,我沒有看到新的專欄。

任何想法我做錯了什麼?

+0

我有點困惑,如果你剛剛添加了一列,爲什麼你需要轉到另一個表?或者,您是否已經引入了第5個表格,並且當您查詢返回'指南位置「的'指南'時,您還希望'指南位置'返回其位置關係的結果' ? – Ohgodwhy

+0

也許withPivot不是我需要的命令?從[文檔](https:// laravel。com/docs/5.1/eloquent-relationships),它暗示這是拉入這個其他值的唯一方法,除非我誤讀它 - 「默認情況下,只有模型鍵將出現在透視對象上。表包含額外的屬性,您必須在定義關係時指定它們:「 – OrdinaryHuman

+0

只有在使用數據透視表時纔會發生這種情況,但在這種情況下,'guide_location'不是數據透視表,也不是甚至多形態,它只是有很多限制。如果我查詢'$ guide = Guide :: find($ id) - > with('guide_location');'我希望在我的返回中看到一個'position'列,給定你上面提供的代碼。你實際上是否有一個你想通過'guide_location'表加入的'position'表? – Ohgodwhy

回答

0

行,->withPivot()正在工作,我只是沒有看到結果,因爲它在location.pivot.position而不是location.position。啞。

希望這可以幫助別人。