Laravel Eloquent两次插入记录

时间:2018-10-13 03:00:25

标签: php database laravel eloquent

我有2个模型:CustomersAttendance(这种关系是一对多的)。当客户访问要检入的URL时,我试图在attendances表中插入一条记录。

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

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

3 个答案:

答案 0 :(得分:1)

创建一个功能来记录/存储退房时间。 然后放入“如果在签到中”功能,以检查用户是否尚未签出,而不是再次签入。 如果您不支票;双击,页面刷新全部将触发多次签入 另一种选择是将签入与登录事件关联,您只需为登录事件创建一个事件侦听器。

答案 1 :(得分:1)

用户可能会尝试两次访问该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 :(得分:0)

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