2016-05-13 78 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。哑。

希望这可以帮助别人。