2015-01-21 99 views
0

我正在使用Laravel 4.2,並且我正在慢慢構建一個複雜的網站,並且我遇到了兩張表格之間的關係,我無法立即想出如何與Eloquent一起映射。下面是相關的模式:在父表和查找表之間創建一個Eloquent關係?

table `missions` 
mission_id (PK) | name   | launch_site_id (FK) 
------------------------------------------------------ 
1    | someMission | 1 
2    | anotherMission | 3 
3    | moreMissions | 1 

table `launch_sites` 
launch_site_id (PK) | name | location 
------------------------------------------------------ 
1     | Kwaj | <some coordinate> 
2     | Florida | <some coordinate> 
3     | Russia | <some coordinate> 

正如你可以看到,該表launch_sitesmissions查找表,每個任務都有一個發射場(保證)。

我試着用雄辯ORM一個hasOne & belongsTo關係表示此:

class Mission extends Eloquent { 
    public function launchSite() { 
     return $this->hasOne('LaunchSite'); 
    } 
} 

class LaunchSite extends Eloquent { 
    protected $table = 'launch_sites'; 

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

不過,我很快就意識到這是行不通的發射場不「屬於」一個使命。有了這層關係,我得到的錯誤:

Column not found: 1054 Unknown column 'launch_sites.mission_id' in 'where clause' (SQL: select * from launch_sites where launch_sites . mission_id = 3 limit 1)

我想要的是什麼關係設置在機鋒這樣我就可以正確地查詢和像這樣一個任務獲取發射場?

Mission::{{Some Query}}->with('launchSite'); 

回答

1

翻轉你的關係。 Mission屬於LaunchSite而不是其他方式。

class Mission extends Eloquent { 
    public function launchSite() { 
     return $this->belongsTo('LaunchSite'); 
    } 
} 

class LaunchSite extends Eloquent { 
    public function mission() { 
     return $this->hasOne('mission'); 
    } 
} 

順便說一下,您不應該指定表名稱LaunchSitelaunch_sites遵循約定。

相關問題