我是laravel的新人。在我的教程中,视频教师在迁移中使用外部但是,我可以创建没有它的关系,只使用 belongsTo 和 hasMany 。当我使用外国时不能轻易删除一个帖子(错误是你不能删除,因为父母外国有孩子......)。 我的问题是我的方式是好还是不好?为什么?
谢谢大家
答案 0 :(得分:0)
你的方式很好,但我认为外键更好。如果你没有这个外键,你会删除帖子,但所有帖子的孩子(因为他们不再有父母而被称为孤儿)会陷入困境。为了解决外键错误,您需要先删除该帖子的所有子项,然后删除该帖子。
好消息是外键也可以为你做这件事,所以你不必担心跟踪所有的孩子。当您设置外键时,如果添加on delete cascade
子句,则在删除帖子时,数据库会自动删除所有帖子的子项并删除帖子而不先删除子项更长时间导致错误。
如果您希望在删除帖子时保留孩子,则可以使用on delete set null
而不是将子项的外键设置为null而不是删除记录。
这对于实施数据完整性非常有用(数据库应仅包含准确有效的数据)。
答案 1 :(得分:0)
答案真的不是'这是Laravel的良好做法',而是'这是数据库管理的良好做法'。
关于使用外键的好坏方面,有很多关于这个主题的文章。这是DBA堆栈交换的一个很好的解释
我个人的偏好是使用它们来维护数据完整性。真正的力量来自于为关系添加级联删除(如果适用于您的设计)。
答案 2 :(得分:0)
这真的取决于您希望数据库有多好。在您的数据库中使用外键的主要原因是
防止会破坏表格之间链接的操作
这样可以防止无效数据被插入外键列,因为它必须指向现有值
从laravel的角度来看,你做的方式是一种更好的方式,因为这是Laravel(Jeffrey Way)的主要教师之一教授laravel系列的开始。
belongsTo()
或hasMany()
是一种定义Laravel中表之间关系的方法