Laravel firstOrNew为相同数据创建重复条目

时间:2018-03-11 11:17:54

标签: php mysql laravel

我的应用程序中有这个特定的代码:

if ($request->filled('jawaban')) {
                $jawaban = JawabanUserM::where('user_id', $user->id)
                    ->where('paket_id', $kuis['paket_id'])->firstOrNew(['soal_id'=>$kuis['curr_id']]);
                if($jawaban->jawaban_id != $request->jawaban) {
                    $jawaban->user_id = $user->id;
                    $jawaban->paket_id = $kuis['paket_id'];
                    $jawaban->soal_id = $kuis['curr_id'];
                    $jawaban->jawaban_id = $request->jawaban;
                    $jawaban->save();
                }
        }

它基本上将用户的答案插入到表JawabanUserM

我在部署时运行此应用程序。 使用laravel 5.5,mysql 5.5.58,nginx 1.12.2,php-fpm 7.0.27。

一次只有800-1000 ++平均用户。使用InnoDB引擎。

当我检查周围时,我发现了一些重复的记录。我检查使用这个SQL:

SELECT
    id, soal_id, user_id, jawaban_id, paket_id, COUNT(*)
FROM
    jawabanuserm
GROUP BY
    soal_id, user_id, jawaban_id, paket_id
HAVING 
    COUNT(*) > 1
ORDER BY COUNT(*) DESC

结果是:

id | soal_id | user_id | jawaban_id | paket_id | COUNT(*)
4702 | 117 | 100 | 401 | 6 | 6
4694 | 111 | 100 | 401 | 6 | 5
15080 | 110 | 1300 | 1077 | 7 | 5
8097 | 186 | 435 | 686 | 6 | 4
4679 | 97 | 100 | 401 | 6 | 4
....

有什么建议可以解决这个问题以及为什么会这样?

首先,我坚信这是由于流程之间的沟通不良造成的。我已向我的同事询问他们建议使用程序,但这会影响我认为的表现。

0 个答案:

没有答案