MySQL Laravel t的正确雄辩关系是什么?

时间:2018-01-18 03:21:18

标签: php laravel laravel-5

我在MySQL ApoderadosAlumnos中有两个表,每个表都有主标识符id,然后我有另一个表Apoderado_Alumno,其中添加了每个表的id,主要思路是一个代理可以有一个或多个Alumno,而1 Alumno可以属于另一个Apoderado

enter image description here

我目前在模特中有以下关系

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(父亲和母亲或其他)

1 个答案:

答案 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.