微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果存在则更新否则插入. MySQL – PHP

我问这个问题是为了找到最好的做法.

DB::table('owners')
   ->where('property_id',$id)
   ->update(array('person_id'=>$owner));

问题是表中的所有者可能没有要更新的行.在那种情况下,我需要进行INSERT INTO而不是UPDATE.

我的问题是我每次必须运行2个查询,一个用于检查行是否已存在,还有一个用于更新或插入.每次运行2个查询是否正确?有没有更好的方法来实现这一目标?我需要为用户快速保持队列进程.

更新:表所有者是多对多关系的中间表.不幸的是我无法使用ON DUPLICATE KEY.

解决方法:

那么你可以尝试使用Laravel的firstOrCreate方法来检查用户是否存在.之后检索用户对象并将其传递给更新函数,否则如果找不到用户,则firstOrCreate方法会照顾您,因为它将使用您将提供的数据创建新用户自动增加最后一个用户1的ID.

还可以选择使用firstOrNew,它将根据您传递的数组值检查实例是否存在,如果未找到匹配项,它将自动创建您正在处理的模型的新实例以进行进一步操作.

这是firstOrNew的示例

示例控制器文件.

public function getFirstUserOrNew($email)
   {

      $user = User::firstOrNew(['email' => $email]);

      if($user)
      {
        $this->UpdateUser($user);
      }
      else
      {
       $this->createuser($user);
      }
   }

    public function UpdateUser(User $user)
    {
      //Do update stuff
    }

    public function createuser(User $user)
    {
      //Do create stuff
    }

P.S – 我来自希腊,如果你想用母语讨论任何东西给我发一个PM

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐