gpt4 book ai didi

laravel - 外键,还是没有外键?定义 Laravel 关系

转载 作者:行者123 更新时间:2023-12-02 13:37:18 24 4
gpt4 key购买 nike

定义外键仅创建名为user_id的整数列之间有什么区别?

// create_posts migrations
$table->integer('user_id')->unsigned();
// vs
$table->foreign('user_id')->references('id')->on('users');

它们可以互换使用吗?每一项的目的是什么?第一个定义还是第二个定义,哪一个被认为是最佳实践?

编辑

命令 $post->user() 可以以任何方式工作,那么使用外键会带来什么优势?

最佳答案

$table->integer('user_id')->unsigned();
// Above command is creating a column in database and it is required to have the required table structure

$table->foreign('user_id')->references('id')->on('users');
// Above command is creating foreign key index and making reference to id in users table.

正如您从命令解释中看到的它们不能互换,您需要第一个命令才能拥有第二个命令没有第一个第二个命令会提示

最佳实践同时使用它们

下面列出了一些优点:

  1. 您可以实现级联更新/删除
  2. 数据库级验证仅记录有效的 user_id 值(以避免有人输入可能无效或不存在的 user_id 999999)。

以上两个是主要优点,您可以表达多种场景如何以上两个可以成为救星。

假设在帖子表中由于人为错误或脚本制作者的错误 user_id = 9999。您认为 $post->user() 会做什么?

除非您可以在没有任何用户引用的情况下发布帖子,否则您会发现如果不使用外键,您可能会发现多个逻辑问题。

将外键视为强制关系并在用户从数据库中删除/删除时处理帖子。

关于laravel - 外键,还是没有外键?定义 Laravel 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com