所以我有那些模特
// Curso.php
public function trienio()
{
return $this->hasMany('App\Trienio');
}
// Trienio.php
public function curso()
{
return $this->belongsTo('App\Curso');
}
public function oe()
{
return $this->belongsTo('App\OE');
}
public function aluno()
{
return $this->hasMany('App\Aluno');
}
// Oe.php
public function trienio()
{
return $this->hasMany('App\Trienio');
}
// Aluno.php
public function trienio()
{
return $this->belongsTo('App\Trienio');
}
public function pap()
{
return $this->hasOne('App\PAP');
}
// Pap.php
public function aluno()
{
return $this->belongsTo('App\Aluno');
}
public function video()
{
return $this->hasOne('App\Video');
}
// Video.php
public function pap()
{
return $this->belongsTo('App\Pap');
}
我遇到了麻烦"转换"那些sql外键。任何人都可以让我了解外键等价物将考虑那些雄辩的关系吗? ty提前
p.s - 如果需要,我可以提供更多细节。
p.s2 - 我真正想知道的是我应该如何构建字段,sql外键和基于那些雄辩关系的约束。我怎么了?
答案 0 :(得分:3)
如果您有hasMany关系,请指定使用的外键。如下
// Curso.php
public function trienio()
{
return $this->hasMany('App\Trienio', 'curso_id');
}
这意味着您在Curso
和Trienio
之间有一对多关系,但是表trienio必须有一个字段curso_id
(如果您想要默认实现,则无需建立使用SQL外键约束的硬关系)默认情况下,此关系将起作用。
在belongsTo
中,您不需要指定密钥(可选)。
从Curso
获取数据$curso = Curso::find(1);
$trienio = $curso->trienio;
在trienio方面,没关系
// Trienio.php
public function curso()
{
return $this->belongsTo('App\Curso');
}
同样适用于所有其他人。
注意:如果你喜欢 Curso 和 Trienio (一对多),那么 Trienio 模型表必须有curso_id
字段,默认情况下,关系将无需在SQL端执行任何操作。
更新:使用SQL修改Trienio模型表。
ALTER TABLE trienios MODIFY COLUMN curso_id INT NOT NULL,
ADD CONSTRAINT trienios_curso_id_fk
FOREIGN KEY(curso_id)
REFERENCES Curso(id);
使用架构构建器(迁移文件)Link
$table->foreign('curso_id')
->references('id')->on('curso')
->onDelete('cascade');
您可以指定级联规则。