You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对特定用户避免数据库重复记录:以食谱名称校验为例

实现同一用户下食谱名称唯一的解决方案

要实现仅限制同一用户不可创建同名食谱、允许不同用户使用相同食谱名称的需求,我们可以从请求校验和数据库约束两层做处理,避免脏数据入库:

1. 调整表单校验规则

你之前使用的'required|unique:recipes, name'规则会校验整个recipes表的name字段全局唯一,不符合允许不同用户使用相同食谱名称的需求,因此我们需要用Rule类自定义unique规则,追加当前登录用户ID作为过滤条件:

$request->validate([
    'name' => [
        'required',
        \Illuminate\Validation\Rule::unique('recipes', 'name')
            ->where('user_id', auth()->id())
    ]
]);

如果是更新已有食谱的场景,还需要排除当前被更新的食谱ID,避免自己和自己查重导致校验失败:

$request->validate([
    'name' => [
        'required',
        \Illuminate\Validation\Rule::unique('recipes', 'name')
            ->where('user_id', auth()->id())
            ->ignore($recipe->id)
    ]
]);

2. 数据库层加联合唯一索引

为了避免业务逻辑出现疏漏导致脏数据入库,建议直接给recipes表加user_id和name的联合唯一索引,迁移文件写法如下:

Schema::table('recipes', function (Blueprint $table) {
    $table->unique(['user_id', 'name']);
});

两层校验搭配使用,就可以完全保证同一用户下不会出现重复的食谱名称,同时不限制不同用户使用相同的食谱名。

内容的提问来源于stack exchange,提问作者Phillip Zoghbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:06:02