Я использую Laravel 4.2, и я медленно строил сложный веб-сайт, и я столкнулся с отношениями между двумя моими таблицами, что я не могу сразу понять, как сопоставлять вместе с 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_sites
является таблицей поиска для missions
, и каждая миссия имеет один сайт запуска (гарантировано).
Я попытался представляя это с отношения 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
wherelaunch_sites
.mission_id
= 3 limit 1)
Какие отношения установки в красноречивых я хочу, чтобы я мог правильно запрашивать и получать сайт запуска из миссии, как так?
Mission::{{Some Query}}->with('launchSite');