我在MySQL Apoderados
和Alumnos
中有两个表,每个表都有主标识符id,然后我有另一个表Apoderado_Alumno
,其中添加了每个表的id,主要思路是一个代理可以有一个或多个Alumno
,而1 Alumno
可以属于另一个Apoderado
我目前在模特中有以下关系
ApoderadoAlumno
public function apoderado()
{
return $this->hasOne(Apoderado::class,'id','apoderado_id');
}
public function alumno()
{
return $this->hasOne(Alumno::class,'id','alumno_id');
}
这是正确的方法吗?我觉得不,我是否必须将这种关系添加到学生和教师模型中?
更新
很抱歉这个混乱,创建中间表因为Alumno可能有超过1个Apoderado(父亲和母亲或其他)
答案 0 :(得分:2)
更新后......这意味着两个模型之间的关系应为Many to Many relationship:
- Apoderado
m ----- m Alumno
。
正如您在documentation中看到的那样。关系在模型中定义。所以在:
- Alumno
模型,添加方法apoderados()
:
...
public function apoderados()
{
return $this->belongsToMany(Apoderado::class,
'apoderado_alumno',
'alumno_id',
'apoderado_id'
);
}
...
现在进入Apoderado
模型:
...
public function alumnos()
{
return $this->belongsToMany(Alumno::class,
'apoderado_alumno',
'apoderado_id',
'alumno_id'
}
...
然后查询,例如与apoderado
相关的校友,你只需要这样做:
$apoderado = Apoderado::find($apoderado_id);
return $apoderado->alumnos; // this will return a collection of alumnos.