【问题标题】:How to use save() method for create and update in Eloquent?如何使用 save() 方法在 Eloquent 中创建和更新?
【发布时间】:2019-11-24 06:38:22
【问题描述】:

我有这个数组形式的对象:

[{"id":"2","passport_number":"AB-2019-11-24-0200","place_issue":"Yuan","date_issue":"2018-10-10","date_expiry":"2018-10-10"}]

我正在尝试通过 laravel eloquent 的 save() 方法保存它,它的外观如下:

private function save_person_passport($object, $person_id, \App\Passport $passport){
    if($object->id > 0){
        $passport->id = $object->id;
    }
    $passport->person_id = $person_id;
    $passport->passport_number = $object->passport_number;
    $passport->place_issue = $object->place_issue;
    $passport->date_issue = $object->date_issue;
    $passport->date_expiry = $object->date_expiry;

    $passport->save(); 
}

我想知道为什么会出现这个错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2' for key 'PRIMARY' (SQL: insert into `passports`

save() 方法不是用于 create 和 update 吗?

【问题讨论】:

    标签: laravel eloquent orm


    【解决方案1】:

    您正在创建\App\Passport 的新实例,因此它将保存记录而不是更新。如果$object->id > 0

    ,你可以做一件事找到id

    将您的代码替换为与我提到的以下相同的代码。

    if($object->id > 0){
        $passport = \App\Passport::find($object->id);
        $passport->id = $object->id;
    }
    $passport->person_id = $person_id;
    $passport->passport_number = $object->passport_number;
    $passport->place_issue = $object->place_issue;
    $passport->date_issue = $object->date_issue;
    $passport->date_expiry = $object->date_expiry;
    
    $passport->save(); 
    

    现在如果是$object->id > 0,那么它会找到Passport 的集合。并更新主键为2的记录

    【讨论】:

      【解决方案2】:

      试试这个:

      private function save_person_passport($object, $person_id, \App\Passport $passport){
      if($object->id > 0){
          $passport = \App\Passport::find($object->id);
            if(!empty($passport){
              $passport->person_id = $person_id;
              $passport->passport_number = $object->passport_number;
              $passport->place_issue = $object->place_issue;
              $passport->date_issue = $object->date_issue;
              $passport->date_expiry = $object->date_expiry;
              $passport->save(); 
            }
          } 
       }
      

      【讨论】:

        猜你喜欢
        • 2013-02-26
        • 2013-09-21
        • 2022-08-09
        • 1970-01-01
        • 1970-01-01
        • 2020-03-14
        • 2018-02-05
        • 2021-10-21
        • 2018-10-03
        相关资源
        最近更新 更多