laravel关系的外键等价物

时间:2017-03-23 16:28:59

标签: php mysql laravel eloquent

所以我有那些模特

// 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外键和基于那些雄辩关系的约束。我怎么了?

1 个答案:

答案 0 :(得分:3)

如果您有hasMany关系,请指定使用的外键。如下

// Curso.php
public function trienio()
{
    return $this->hasMany('App\Trienio', 'curso_id');
}

这意味着您在CursoTrienio之间有一对多关系,但是表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');

您可以指定级联规则。