老师,为什么级联删除$table->cascadeOnDelete();总是不行?搞了一个晚上,chatgpt都没帮我找到问题。只好请教老师。
1.mysql,默认引擎InnoDB;
2.Laravel与数据库连接配置没问题,数据增删改查都正常, User::find(1)->articles()->get()都没问题,就是不能级联删除:
User::find(1)->delete()
比如在tinker执行上面语句,就只能把user删了,user关联的article,删不了。
3. claude说要用cascadeOnDelete就必须使用软删除,chatgpt告诉我不必使用软删除。我在两个模型上加上软删除或者不加,都还是不能使用级联删除cascadeOnDelete。
article的migration:
public function up(): void { Schema::create('articles', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onUpdate('cascade')->onDelete('cascade'); $table->string('title'); $table->timestamps(); $table->softDeletes(); }); }
user的migration:
public function up(): void { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); }
本来是用ulid顺带试试的,发现无法级联删除,换成id也不行。看来也不是ulid的原因。
这两周孩子病了,没有处理大家的问题,非常抱歉。希望这个问题你已经解决了,并不需要软删除,你的用法也没啥问题,有时候会跟具体的数据库版本有关,而且虽然数据库提供了这个功能,真正实现的时候建议不要用,删除逻辑宁可自己多写点代码,这样可以更好的掌控,这也是所有成熟公司普遍采取的策略。再比如字段设计的时候,我基本都允许 nullable,这样也是为了增加灵活性和扩展空间,最后祝顺利。
了解了,谢谢老师的解答。后面换台电脑就可以了,mysql版本都是一样的,还没找到原因哈哈哈。
只买了老师的课程,又没额外买1v1的服务,老师抱歉个啥,祝全家安康~
另外我个人的建议是今后再遇到类似问题,不要这么折腾,会浪费大量时间精力,因为这类问题对于人的技术能力,逻辑能力带不来什么帮助和提升,要果断跳过,毕竟自己可以通过其他方式实现这个功能。
老师,为什么级联删除$table->cascadeOnDelete();总是不行?搞了一个晚上,chatgpt都没帮我找到问题。只好请教老师。
1.mysql,默认引擎InnoDB;
2.Laravel与数据库连接配置没问题,数据增删改查都正常, User::find(1)->articles()->get()都没问题,就是不能级联删除:
比如在tinker执行上面语句,就只能把user删了,user关联的article,删不了。
3. claude说要用cascadeOnDelete就必须使用软删除,chatgpt告诉我不必使用软删除。我在两个模型上加上软删除或者不加,都还是不能使用级联删除cascadeOnDelete。
article的migration:
user的migration:
本来是用ulid顺带试试的,发现无法级联删除,换成id也不行。看来也不是ulid的原因。
这两周孩子病了,没有处理大家的问题,非常抱歉。希望这个问题你已经解决了,并不需要软删除,你的用法也没啥问题,有时候会跟具体的数据库版本有关,而且虽然数据库提供了这个功能,真正实现的时候建议不要用,删除逻辑宁可自己多写点代码,这样可以更好的掌控,这也是所有成熟公司普遍采取的策略。再比如字段设计的时候,我基本都允许 nullable,这样也是为了增加灵活性和扩展空间,最后祝顺利。
了解了,谢谢老师的解答。后面换台电脑就可以了,mysql版本都是一样的,还没找到原因哈哈哈。
只买了老师的课程,又没额外买1v1的服务,老师抱歉个啥,祝全家安康~
另外我个人的建议是今后再遇到类似问题,不要这么折腾,会浪费大量时间精力,因为这类问题对于人的技术能力,逻辑能力带不来什么帮助和提升,要果断跳过,毕竟自己可以通过其他方式实现这个功能。