【问题标题】:Eloquent firstOrNew causes duplicate entry errorEloquent firstOrNew 导致重复输入错误
【发布时间】:2015-04-28 05:39:06
【问题描述】:

我正在尝试查找一个项目并在它存在时对其进行更新,或者在它不存在时创建一个新项目。但是,由于某种原因,它似乎试图创建一个新对象,而不是在数据库中已经存在的情况下进行更新。

    $object = ObjectItem::firstOrNew(array('object_item_id'=>$userEditedObject['object_item_id'], 'object_id'=>$object_id));

    $object->setFields($userEditedObject);

    if($object->save()){
        return TRUE;
    } else {
        return FALSE;
    }

该代码似乎产生了错误

"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '113' for key 'PRIMARY'

这很奇怪,因为我以前使用过它并且效果很好——似乎只是在这种特殊情况下。

【问题讨论】:

  • 表中的主键是什么?
  • 113,当然。请查看我对 Margus Pala 的回答的评论

标签: php mysql laravel eloquent


【解决方案1】:

这意味着数组$userEditedObject包含主键的重复值,通常是“id”。

您获得 $object 并尝试编辑其主键,以便存在具有相同主键的其他行导致失败。

查看哪个字段是您的应用程序的主键,并确保您没有创建任何重复项。

【讨论】:

  • 我同意 $userEditedObject 的 id 是重复值,但那是因为该项目已经存在,如果是这种情况,firstOrNew 应该简单地根据object_id 和@ 获取第一个项目987654322@。但是您尝试编辑主键是正确的。在我的模型中,我将主键作为可填充字段,这实际上是错误的,因为它在数据库中自动递增。因此,即使 ID 实际上没有被更改为新值,它仍然被认为是这样。一旦我使属性不可填充,错误就消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2019-10-09
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
相关资源
最近更新 更多