确保我在 laravel 5 中获得了正确的外键语法

Posted

技术标签:

【中文标题】确保我在 laravel 5 中获得了正确的外键语法【英文标题】:Making sure I got foreign key syntax right in laravel 5 【发布时间】:2015-12-24 19:38:57 【问题描述】:

所以我理解如何制作外键没有问题,但我的脑海中可能会出现一些倒退的小事。

据我所知,当您定义外键时,我可以从 documentation 中读取,

$table->foreign('user_id')
      ->references('id')->on('users')
      ->onDelete('cascade');

这里的 onDelete 引用了这个,这将是您在其间创建外键的任何内容。一个思考的例子是你有用户表和一个帖子表。因此,您的 post 表将包含(为简单起见)。

当我在这里阅读外键语法时,当我删除帖子时,它会级联删除与之相关的所有内容。但这是倒退吗?我想在用户表上定义一个级联删除规则,这样如果您删除一个用户,那么您会删除与该用户相关的所有内容。

再一次,如果您删除许多帖子中的 1 个,然后删除用户,那将是愚蠢的。有人可以为我澄清一下吗,如果事实上有一种方法可以在父关系(1 比 1:N)上定义此规则,我将如何去做?

【问题讨论】:

【参考方案1】:

你的想法是有道理的,特别是因为你只考虑两张桌子。 on delete 语句描述了当引用的用户行被删除时,post 表中的列会发生什么。

但是,许多表可能具有对user_id 的外键引用。而且,每个人都可以以不同的方式对待。一刀切不是万能的。因此,将这些信息存储在外键端而不是主键端确实很有意义。

【讨论】:

好的,只是为了解决这个问题。如果我有以下表格:user post comment 。 user 定义 ->hasMany('post') 和 hasMany('comment'),post 和 comment 定义 ->hasOne('user');然后按照上面的示例添加外键。如果我删除 1 个帖子会发生什么,如果我自己删除用户会发生什么? @Dennis 。 . .当您删除用户时,相应的帖子也会被删除。

以上是关于确保我在 laravel 5 中获得了正确的外键语法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 迁移:无法添加 char 数据类型的外键

无法访问我在 Laravel Blade 中的外键

Laravel-7 迁移中的外键约束形成错误

Laravel 4迁移问题中的外键

SQLSTATE [HY000] Laravel 8 中的外键约束格式错误

如何通过laravel中的外键检索记录的完整数据?