当前位置: 首页 > 知识库问答 >
问题:

自动删除儿童模型

斜瑞
2023-03-14

我有三种模式:用户有许多帖子有许多评论。当我删除一个用户时,我希望自动删除他所有相关的帖子以及与这些帖子相关的评论。为了实现这一点,我在用户发布模型中有以下代码:

// User
protected static function boot() {
    parent::boot();

    static::deleting(function($user) {
        $user->posts()->delete();
    });
}

// Post
protected static function boot() {
    parent::boot();

    static::deleting(function($post) {
        $post->comments()->delete();
    });
}

当我删除一个用户时,他的所有帖子都会被删除,但是评论会被保留。为什么会发生这种情况?

共有2个答案

乐修远
2023-03-14

你试过下一步做什么吗?

// User
protected static function boot() {
    parent::boot();

    static::deleting(function($user) {
        foreach ($user->posts() as $post)
        {
            $post->comments()->delete();
        }            
        $user->posts()->delete();

    });

顺便说一句,这应该在删除级联的数据库模式中,您不需要任何模型代码来删除孩子。

费子濯
2023-03-14

最好使用数据库模式来实现这一点。它更快,不会有“最大函数嵌套级别”的错误

public function up()
{
    Schema::create('comments', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('post_id');
        $table->string('comment');
    });

    Schema::table('comments', function(Blueprint $table){
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    });
}
 类似资料:
  • 有人知道我为什么会有这种行为吗?是我的代码出了bug还是什么问题?

  • 我有父母和孩子。每个儿童演员控制一个装置。当我创建所有的子角色时,我给他们一个uuid。 每个子参与者都是通过设备配置创建的,当配置更改时,我希望通过以下方式重新创建参与者: > 停止旧的: 最终的未来停止了=优雅的停止(actorRef,Duration.create(1,时间单位。秒)); Await.result(停止,Duration.create(1, TimeUnit.二)); 重新创

  • 我有一个非常简单的功能组件,如下所示: 和另一个组成部分: 我不断发现以下错误: [ts]JSX元素类型“ReactNode”不是JSX元素的构造函数。类型“undefined”不可分配给类型“ElementClass”。[2605] 如何正确地键入此内容?

  • 我对gitlab ci子管道有问题。需要在具有多个应用程序的repo中的每次提交后自动触发ci管道。需要配置以检测哪些文件夹/文件被修改,以便知道要触发哪个应用程序管道 结构示例 Main“.gitlab ci.yml”是: appA1".gitlab-ci.yml"是: appA2“.gitlab ci.yml”是: 这种配置的目的是,例如,当我在应用**中更改文件时,管道会检测到更改并生成应用

  • 昨天我在我的项目中添加了,现在当我离开并回到导航中的元素时,它会重新加载Sky,我得到 警告:儿童(…):遇到两个具有相同密钥的子项,。子密钥必须是唯一的;当两个子项共享密钥时,将只使用第一个子项。 (上面使用的数字50只是一个例子,它每次抛出这个错误~40次,都是不同的id) 这个问题似乎源于我的文件: 因为每次我进入另一个屏幕时,这个组件都会卸载,然后在我回来时重新安装。 当完成时,创建了一组