如果存在则更新否则插入. 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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...