2013-10-27 22 views
1

我有一個名爲之旅父模型應該涉及到模型型地址的兩個實例關係 - 一次「出身」和一次爲'目的地'。我無法弄清楚這樣做的最有效方法。我想用Laravel雄辯的ORM與渴望加載實現的東西優雅像下面,當我返回的旅程:雄辯ORM - 如何處理與父模型同子模型的兩個實例

return Journey::with('origin','destination'); 

我已經試過如下:

1)用雄辯的ORM的one to one relationships

Journey 
------- 
id 
user_id 
date 

Address 
------- 
id 
journey_id 
street 
city 
zipcode 

觀察:

  • 需要在添加 'journey_id' RESS模型,這意味着我真的不能再使用此模型以外的任何其他旅程
  • 地址連接到旅作爲一個整體,所以我不能始發地和目的地實例之間的區別

2)使用ORM雄辯的polymorphic relationships

Journey 
------- 
id 
user_id 
date 

Address 
------- 
id 
street 
city 
zipcode 
addressable_id 
addressable_type 

觀察:

  • 我現在可以重新使用與其他車型的地址模式,但...
  • 地址現在依然與旅程作爲一個整體,所以

3),涉及「journey.origin」或「journey.destination」通過其連接到「地址我不能始發地和目的地實例之間區別.ID」

Journey 
------- 
id 
user_id 
origin (address.id) 
destination (address.id) 
date 

Address 
------- 
id 
street 
city 
zipcode 

觀察:

  • 我現在可以起源&目的地實例之間的區別,但是...
  • 我想我必須使用流利的查詢的連接,所以我沒有得到原籍&目的地追溯到地址車型
  • 沒有鏈接回從地址到旅途

沒有人有任何關於表格/關係結構的建議,使旅程(源自目的地&)的插入和選擇儘可能優雅,最好使用Eloquent,以便我可以利用我的模型屬性和功能?

此外,儘管通過Journey模型訪問地址將成爲主要用例,但我還希望能夠通過Address模型訪問父Journey。

+0

請問您有多個'Journey'與同'destionation'或'origin'? – rmobis

+0

這是最終目標。但現在,如果地址重複,那麼我可以使用地址。 – Bishy

回答

1

你應該擁有的是:

數據庫Strucuture

Journey 
--------- 
id 
origin_id 
destionation_id 
user_id 
date 

Address 
--------- 
id 
street 
city 
zipcode 

然後,用One-to-Many關係鏈接您Journey模型Address

Journey.php

class Journey extends Model { 
    // ... 

    public function origin() { 
     return $this->belongsTo('Address'); 
    } 

    public function destination() { 
     return $this->belongsTo('Address'); 
    } 
} 

Address.php

class Address extends Model { 
    // ... 

    public function journeysAsOrigin() { 
     return $this->hasMany('Journey', 'origin_id'); 
    } 

    public function journeysAsDestination() { 
     return $this->hasMany('Journey', 'destination_id'); 
    } 
} 
+0

現貨在隊友,謝謝。 – Bishy