我有2个模型:Customers
和Attendance
(这种关系是一对多的)。当客户访问要检入的URL时,我试图在attendances
表中插入一条记录。
$customer = Customer::find($id);
$customer->attendances()->create(['checked_in_at' => now()]);
但是我不知道为什么上面的代码插入2次而不是1次,有时却正确地插入了1次。
答案 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)
您可能有一个“提交”按钮,允许用户双击它两次。