为什么多行("版本")保存雄辩,而我只编辑一行



我使用版本控制系统来保存"次要"(应用程序中的模型(的多个版本。它包含相当多的字段,例如名称,目标,要求,主题等等。当我使用 eloquent 保存新版本或"版本 2"时,它也会更改另一个版本。

我已经尝试了多种方法来保存未成年人,例如请求第一个并像下面一样更新它,或者逐个更改每个单独的项目。

Minor::limit(1)
            ->where("id", $id)
            ->where('version', $_POST['version'])
            ->first()
            ->update([
                'name' => $_POST['name'],
                'ects' => floatval($_POST['ects']),
                'contact_hours' => intval($_POST['contact_hours']),
                'education_type' => $_POST['education_type'],
                'language' => $_POST['language'],
                'subject' => Input::get('subject'),
                'goals' => Input::get('goals'),
                'requirements' => Input::get('requirements'),
            ]);

它应该只保存选定的版本,但相反,它会覆盖具有相同 ID 的未成年人的所有版本,并将它们保存到数据库中。我该如何防止这种情况,或者有人知道如何解决这个问题吗?

您可以尝试使用updateOrCreate方法:

Minor::updateOrCreate([
           'id' => $id,
           'version' => $_POST['version']
       ],[
           'name' => $_POST['name'],
           'ects' => floatval($_POST['ects']),
           'contact_hours' => intval($_POST['contact_hours']),
           'education_type' => $_POST['education_type'],
           'language' => $_POST['language'],
           'subject' => Input::get('subject'),
           'goals' => Input::get('goals'),
           'requirements' => Input::get('requirements'),
        ]);

我仍然不知道为什么会发生这种情况或如何使用相同的方法修复它。然而,我已经找到了解决方法。我现在使用 ->update([...]( 方法更新并保存未成年人,将其构建为 eloquent 中。

        Minor::where([["id", "139858"], ["version", Input::get('version')]])
            ->update([
                'name' => Input::get('name'),
                'ects' => Input::get('ects'),
                'contact_hours' => Input::get('contact_hours'),
                'education_type' => Input::get('education_type'),
                'language' => Input::get('language'),
                'subject' => Input::get('subject'),
                'requirements' => Input::get('requirements'),
                'goals' => Input::get('goals')
            ]);

这似乎不会改变其他版本。这是我发现使其工作的唯一方法,您不能创建对象的变量,更改值然后保存它。这将覆盖其他版本。

最新更新