2014-03-31 30 views
0
Tables: 
-Incidents 
--references locations thru location_id 
-Locations 
--references areas thru area_id 
-Areas 

每個區域,都有位置和事件可以發生在任何位置。數據關係模式

我該如何建立關係,以便我可以獲得雄辯的抓取,某個地區或地點的所有事件?

我必須在事件表中引用area_id嗎?

+1

最好不要在事件模型中引用area_id:如果某個位置的區域發生變化,則該事件將與錯誤的區域相關聯。 –

+0

感謝您指出這一點 – Erocanti

+1

您可能想查看關係類型[hasManyThrough](http://laravel.com/docs/eloquent#has-many-through),該關係類型可以將事件加入區域,同時保留與地點的中間關係。這樣,您應該可以使用'$ area-> incidents'來獲取特定區域的事件列表。 – alexrussell

回答

2

的AREA_ID

Incidents::with(array('location', function($q) use ($areaId) { 
    return $q->where('area_id', $areaId); 
}))->get(); 

看「渴望裝載約束」不應該在事件表中,因爲被引用間接它已經在那裏通過LOCATION_ID。

在設計關係數據庫表結構始終適用normalization如果可能的話把你的圖式到第三範式。

究竟是什麼問題?你已經描述了你的表之間的關係。如果有具體實施的具體內容,請告訴我。

+0

謝謝,我認爲我在正確的方向,@hannesvdvreken澄清了我應該如何從事情的雄辯orm方面接近它。 – Erocanti