【问题标题】:foreign keys equivalents of laravel relationshipslaravel 关系的外键等价物
【发布时间】:2017-08-16 08:19:58
【问题描述】:

所以我有这些模型

// 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 外键时遇到了麻烦。任何人都可以让我了解外键等价物将考虑那些雄辩的关系吗?提前联系

p.s - 如果需要,我可以提供更多详细信息。

p.s2 - 我真正想知道的是我应该如何构建字段、sql 外键和基于这些雄辩关系的约束。我该怎么做?

【问题讨论】:

  • 您可以记录迁移完成的查询并查看它们是什么。
  • 在下面回答。

标签: php mysql laravel eloquent


【解决方案1】:

如果您有 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');
}

对所有其他类似。
注意:如果您对 CursoTrienio(一对多)这样做,则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');

您可以指定级联规则。

【讨论】:

  • 感谢您的提醒,但我并不是真的想要这个。我想知道的是如何根据我展示的雄辩关系在 sql 数据库中构造外键和约束。我想我表达得不好
  • 查看我在这篇文章中的更新,您可以在创建表时使用 laravel 模式构建器创建关系和外键(运行迁移),如果您想使用 SQL,那么您可以运行 SQL SQL 服务器上的语句。但是一旦你使用 ORM 建立关系,就不需要使用 SQL 来建立关系。
猜你喜欢
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 2019-02-19
  • 1970-01-01
相关资源
最近更新 更多