2014-10-07 95 views
8

我需要使用數據透視表的ID作爲另一個表中的外鍵。Laravel Eloquent - 在其他表中使用數據透視表的ID作爲外鍵

,比如我有以下表格:

users: id, username, ... 

places: id, placename, lat, lng, ... 

place_user: id, user_id, place_id 

routes: place_user_id, lat, lng, inserted_at. 

所以當用戶說,我要去那個地方,我在place_user表中的新條目並開始記錄他需要到那裏的路線。因此,對於每個place_user條目,我在路由表中有許多條目。

使用口才做這種關係的正確方法是什麼?我應該爲數據透視表創建一個模型嗎?

我曾嘗試用以下解決方案,但沒有運氣,以解決我的問題:https://github.com/laravel/framework/issues/2093#issuecomment-39154456和發佈的評論有https://github.com/laravel/framework/issues/2093#issuecomment-58187802

任何建議,將不勝感激。

+0

如果我理解正確的話,你想'用戶'和'位置'之間的關係,使用'place_user'表。什麼是「路線」表? – Jerodev 2014-10-07 14:59:42

+0

我有很多很多關係的用戶和地方,以及路線和place_user關係表之間的一對多關係。 – KoKo 2014-10-07 15:05:41

+0

您需要爲數據透視表使用額外的模型,其中一個擴展'模型'('Eloquent')而不是'Pivot'。 'Pivot'具有構造函數,將使其無法工作。如果你需要使用'pivot'屬性(在關係的上下文中),那麼你只需要定製樞軸模型(擴展'Pivot')。 – 2014-10-07 15:51:14

回答

10

經過大量的搜索和嘗試不同的解決方案,我想出了以下解決方案:

用戶模型:

class User extends \Eloquent { 
    public function places() { 
     return $this->hasMany('PlaceUser')->with('Place'); 
    } 
} 

放置模型:

class Place extends \Eloquent { 
    public function users() { 
     return $this->hasMany('PlaceUser')->with('User'); 
    } 
} 

PlaceUser型號:

class PlaceUser extends \Eloquent { 

    public function user() { 
     return $this->belongsTo('User'); 
    } 

    public function place() { 
     return $this->belongsTo('Place'); 
    } 

    public function footprints() { 
     return $this->hasMany('Footprint'); 
    } 
} 

我已更改腳印的名稱路由,以避免與laravel中包含的路由類有關的問題。

足跡模型:

class Footprint extends \Eloquent { 
    public function place_user() 
    { 
     return $this->belongsTo('PlaceUser'); 
    } 
} 

最後我得到的結構,我可以做出不同的查詢,如:

// gets all places with corresponding pivot table entries and users table entries  
Place::with('users')->get(); 
// get user with id=1 including corresponding pivot table entries and places table entries 
User::with('places')->find(1); 
// get footprint of the user 
$user->places->get(0)->footprints 

希望這有助於

相關問題