【问题标题】:What is this second parameter in the foreign method in migration Laravel?迁移 Laravel 中的外部方法中的第二个参数是什么?
【发布时间】:2020-01-29 06:49:02
【问题描述】:

我在这个新项目中使用 Laravel,但有一段代码我不知道它的作用。

$table->foreign('course_id', '54419_596eedbb6686e')->references('id')->on('courses');

上面的行是我的迁移文件之一,我知道我说“course_id”是与课程表上的“id”相关的外键。但是我不知道第二个参数('54419_596eedbb6686e')是什么,如果我查看方法描述,它会说这是一个名称,但名称是什么?我应该创建一个这样的数字并将其放入我所有的外键中吗?有没有生成这个数字的命令?

无论如何,如果有人可以帮助我理解这段代码,那就太好了。 希望我对这个问题很清楚。

【问题讨论】:

    标签: php laravel parameters foreign-keys migration


    【解决方案1】:

    第二个参数是外键的名称。

    默认情况下,此$table->foreign('course_id')->references('id')->on('courses'); 的外键名称为courses_course_id_foreign

    在这种情况下$table->foreign('course_id', '54419_596eedbb6686e')->references('id')->on('courses');,您的外键将被命名为54419_596eedbb6686e

    【讨论】:

    • 哦,好吧,这是有道理的。非常感谢你。请让我再问你几件事。这是通过任何改变的好习惯吗?我的意思是用值命名外键?如果是,这个数字是由某个命令生成的?
    • @CristhoferAlencar 有什么特别的理由用值来命名外键吗?我不太确定这是否是一个很好的做法,因为您将无法仅通过查看名称就知道它是什么键,并且可能会让其他人感到有些困惑。
    • 是的,就是这样,我其实不知道。我正在从事这个已经在进行的项目,并且在工作时遇到了这个问题,并且不太了解这样做的必要性。我同意你的看法,这没有必要,而且真的很混乱。无论如何,感谢您的时间和关注。
    【解决方案2】:

    当您创建外键时,您正在创建一个约束,这就是 foreign() 函数的第二个参数指定的内容:约束名称。

    如果您使用的是 mysql,您可以登录 shell(或用于检查数据库的任何程序)并运行 SHOW CREATE TABLE table_name。这将输出有关您指定的表的信息。在那里,您将能够看到 '54419_596eedbb6686e' 作为表的约束。像这样的:

    CONSTRAINT constraint_name FOREIGN KEY (column_id) REFERENCES table_name (id) ON DELETE CASCADE

    您可以在以下链接中找到更多信息:MySQL FOREIGN KEY syntax SQL FOREIGN KEY on CREATE TABLE

    【讨论】:

      【解决方案3】:

      当你创建迁移时,让它在你的外键迁移中

       $table->foreign('foreign_id')
                  ->references('id')->on('main_table_name')
                  ->onUpdate('CASCADE')
                  ->onDelete('RESTRICT');
      

      【讨论】:

      • @crishofer-alencar
      猜你喜欢
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2016-03-25
      • 2015-08-02
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多