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

Php MySQL Laravel t的正确雄辩关系是什么?,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在MySQLApoderados和Alumnos中有两个表,每个表都有它们的主标识符id,然后我有另一个表Apoderado\u Alumno,其中添加了每个表的id,其主要思想是代理可以有一个或多个Alumno,并且一个Alumno可以属于一个或多个Apoderado 我目前在模型中有以下关系 ApoderadoAlumno public function apoderado() { return $this->hasOne(Apoderado::class,'id','a

我在MySQL
Apoderados
Alumnos
中有两个表,每个表都有它们的主标识符id,然后我有另一个表
Apoderado\u Alumno
,其中添加了每个表的id,其主要思想是代理可以有一个或多个
Alumno
,并且一个
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');
}
这是正确的方法吗?我觉得没有,我是否必须将这种关系添加到学生和教师模型中

更新


很抱歉造成混淆,请创建中间表,因为在更新后,校友可能有多个Apoderado(父亲和母亲或其他)

。。这意味着两个模型之间的关系应该是a: -
Apoderado
m-----m
校友

定义关系 正如你在照片中看到的。关系在模型中定义。所以在: -
校友
模型,添加方法
apoderados()

现在在您的
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.

您不需要为透视表创建雄辩的模型。相反,您可以使用多对多关系。按照这个链接@Sohel0415,甚至不像他描述的那样,这看起来像一对多的关系。@HCK他在数据透视表上建立关系,我在评论中建议在他们的父表/模型上使用多对多关系,如alumno/apoderado。@Sohel0415我知道。但他说:“一个律师可以有一个或多个校友,但一个校友只能有一个律师。这就是为什么我选择建立一对多关系。现在,如果他需要使用数据透视表(我不能给你一个理由)是的,他可以使用m-m关系。但这不是正确的关系。@HCK现在知道了,似乎他不需要数据透视表,对吧?谢谢你,你的回答帮了我很大的忙。
$apoderado = Apoderado::find($apoderado_id);
return $apoderado->alumnos; // this will return a collection of alumnos.