gpt4 book ai didi

php - 如何避免插入重复记录

转载 作者:行者123 更新时间:2023-12-03 22:53:25 26 4
gpt4 key购买 nike

我正在使用 Laravel 5.6.29

if ( CharmFlag::where('post_id', '=', $postId)->where('charm_id', '=', $charm_id)->get()->isEmpty() ) {
CharmFlag::create([
'post_id' => $postId,
'charm_id' => $charm_id,
'gif_flag' => $gif_flag
]);
} else {
$charmFlag = CharmFlag::where('post_id', '=', $postId)->where('charm_id', '=', $charm_id)->first();
$charmFlag->gif_flag = $gif_flag;
$charmFlag->save();
}

但在数据库中我可以看到类似的记录
enter image description here

现在可以看到 charm_id=18604charm_id=18605 有重复记录,但根据我的编码,它不应该发生。

更新

也将代码更改为
$charmFlag = CharmFlag::firstOrNew(['post_id' => $postId, 'charm_id' => $charm_id]);
$charmFlag->gif_flag = $gif_flag;
$charmFlag->save();

但仍然得到重复的条目。

关于这一点的有趣事实是对于每个重复记录,时间戳也相同。所有这些情况也只有第二个记录。

移民
Schema::create('charm_flags', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('post_id');
$table->unsignedInteger('charm_id');
$table->boolean('gif_flag')->default(0);

$table->timestamps();
$table->foreign('post_id')->references('post_id')->on('posts');
$table->foreign('charm_id')->references('charm_id')->on('base_charms');
});

更新 2

变成
CharmFlag::updateOrCreate(
['post_id' => $postId, 'charm_id' => $charm_id],
[
'gif_flag' => $gif_flag,
]
);

但仍然得到重复的记录。

最佳答案

您不需要检查 isEmpty ,您可以使用 firstOrNew()updateOrCreate() 方法

$charmFlag = CharmFlag::firstOrNew(['post_id' => $postId, 'charm_id' => $charm_id]);
$charmFlag->gif_flag = $gif_flag;
$charmFlag->save();

或者
$charmFlag = CharmFlag::updateOrCreate(['post_id' => $postId, 'charm_id' => $charm_id]);
$charmFlag->gif_flag = $gif_flag;
$charmFlag->save();

请检查文件
https://laravel.com/docs/5.3/eloquent#insert-update-delete

关于php - 如何避免插入重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55805858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com