在父 table 和查找 table 之间创建 Eloquent 关系?
Create a Eloquent relationship between a parent table and a lookup table?
我正在使用 Laravel 4.2 并且正在慢慢构建一个复杂的网站,我发现我的两个 table 之间存在一种关系,我无法立即弄清楚如何与 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>
如您所见,table launch_sites
是对 missions
的查找 table,每个任务都有一个发射场(保证)。
我尝试在 Eloquent 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');
}
}
但是,我很快意识到这行不通,因为发射场不是 "belong to" 任务。有了这种关系,我得到了错误:
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)
我想要在 Eloquent 中建立什么关系,以便我可以正确查询并从这样的任务中获取发射场?
Mission::{{Some Query}}->with('launchSite');
翻转你的人际关系。 Mission
属于 LaunchSite
而不是相反。
class Mission extends Eloquent {
public function launchSite() {
return $this->belongsTo('LaunchSite');
}
}
class LaunchSite extends Eloquent {
public function mission() {
return $this->hasOne('mission');
}
}
顺便说一下,您不需要指定 LaunchSite
的 table 名称。 launch_sites
遵循惯例。
我正在使用 Laravel 4.2 并且正在慢慢构建一个复杂的网站,我发现我的两个 table 之间存在一种关系,我无法立即弄清楚如何与 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>
如您所见,table launch_sites
是对 missions
的查找 table,每个任务都有一个发射场(保证)。
我尝试在 Eloquent 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');
}
}
但是,我很快意识到这行不通,因为发射场不是 "belong to" 任务。有了这种关系,我得到了错误:
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)
我想要在 Eloquent 中建立什么关系,以便我可以正确查询并从这样的任务中获取发射场?
Mission::{{Some Query}}->with('launchSite');
翻转你的人际关系。 Mission
属于 LaunchSite
而不是相反。
class Mission extends Eloquent {
public function launchSite() {
return $this->belongsTo('LaunchSite');
}
}
class LaunchSite extends Eloquent {
public function mission() {
return $this->hasOne('mission');
}
}
顺便说一下,您不需要指定 LaunchSite
的 table 名称。 launch_sites
遵循惯例。