【问题标题】:Laravel Eloquent inserted record twice timesLaravel Eloquent 插入记录两次
【发布时间】:2018-10-13 03:00:24
【问题描述】:

我有 2 个模型:CustomersAttendance(关系是一对多)。当客户访问 URL 进行签到时,我尝试在 attendances 表中插入一条记录。

$customer = Customer::find($id);
$customer->attendances()->create(['checked_in_at' => now()]);

但是我不知道为什么上面的代码插入了 2 次而不是 1 次,有时它正确插入了 1 次。

【问题讨论】:

    标签: php database laravel eloquent


    【解决方案1】:

    创建一个函数来记录/存储退房时间。 然后放置一个 If in check-in 函数来检查用户是否尚未签出而不是再次签入。 如果您不检查;双击,页面刷新都会触发多次签到 另一种选择是将签到与登录事件联系起来,您只需为登录事件创建一个事件侦听器。

    【讨论】:

      【解决方案2】:

      用户可能会尝试点击 URL 两次(无论出于何种原因,互联网连接不佳或其他原因)

      您可以运行另一个查询以确保用户在短时间内不会有重复的行或两次出勤。

      您可以像这样运行查询

      $last_attendance = $customer->attendances()->orderBy('checked_in_at', 'DESC')->first();
      
      if(Carbon::now()->diffInMinutes($last_attendance->checked_in_at) > 5){
          $customer->attendances()->create(['checked_in_at' => now()]);
      }
      

      这将确保插入新记录至少需要 5 分钟,或者您可以根据需要更改值。

      【讨论】:

      • 是的。我正在这样做,但我只想知道为什么它插入了 2 次。我自己测试过,我只输入了 1 次 :(。谢谢。
      • 在这种情况下最好的解决方案是调试,由于您已经在记录时间,您可以检查两次签入之间的增量是多少,这可能有助于找出问题。
      【解决方案3】:

      您可能有一个提交按钮,允许用户双击调用它两次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 1970-01-01
        • 2014-12-08
        • 2016-12-31
        • 2019-08-01
        • 2015-02-02
        相关资源
        最近更新 更多