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

如何为重复的文章标题生成唯一的slug?

生成唯一Slug的解决方案

这是开发中很常见的场景——当标题重复时,如何生成不冲突的唯一slug?结合你用的Laravel环境,给你几个实用的方案:

方案一:手动检查并追加数字(轻量场景首选)

核心思路是先生成基础slug,然后循环检查数据库,直到找到未被使用的slug,重复时追加数字后缀:

// 生成基础slug
$baseSlug = str_slug($request->title, '%');
$slug = $baseSlug;
$count = 1;

// 循环检查,直到找到唯一slug
while (Post::where('slug', $slug)->exists()) {
    $slug = "{$baseSlug}%{$count}";
    $count++;
}

// 赋值并保存
$post->title = $request->title;
$post->body = $request->body;
$post->slug = $slug;
$post->save();

这个方法简单直接,不需要额外依赖,适合数据量不大的项目。你可以根据需求调整分隔符(比如把%换成-或者其他符号)。

方案二:用第三方包自动处理(省心高效)

如果项目需要更健壮的slug生成逻辑,推荐使用spatie/laravel-sluggable这个Laravel生态里的成熟包,它能自动处理重复slug、支持自定义规则:

步骤1:安装包(如果还没装)

composer require spatie/laravel-sluggable

步骤2:在Post模型中配置

use Illuminate\Database\Eloquent\Model;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;

class Post extends Model
{
    use HasSlug;

    // 配置slug生成规则
    public function getSlugOptions(): SlugOptions
    {
        return SlugOptions::create()
            ->generateSlugsFrom('title') // 从title字段生成slug
            ->saveSlugsTo('slug') // 保存到slug字段
            ->usingSeparator('%') // 使用你指定的分隔符
            ->generateUniqueSlugs(); // 自动生成唯一slug
    }
}

步骤3:保存时自动生成

现在你不需要手动赋值slug了,直接保存即可:

$post->title = $request->title;
$post->body = $request->body;
$post->save(); // 包会自动处理重复,生成类似`my-title%1`的唯一slug

这个包还支持更多高级配置(比如更新标题时是否重新生成slug),非常适合中大型项目。

方案三:高并发场景优化(避免冲突)

如果你的网站有较高的并发量,手动检查的方式可能会出现“竞态条件”——两个请求同时检查到同一个slug可用,然后都插入导致报错。这时候可以用数据库事务包裹检查逻辑:

use Illuminate\Support\Facades\DB;

DB::transaction(function () use ($post, $request) {
    $baseSlug = str_slug($request->title, '%');
    $slug = $baseSlug;
    $count = 1;

    while (Post::where('slug', $slug)->exists()) {
        $slug = "{$baseSlug}%{$count}";
        $count++;
    }

    $post->title = $request->title;
    $post->body = $request->body;
    $post->slug = $slug;
    $post->save();
});

事务能确保检查和插入操作是原子性的,避免并发冲突。

内容的提问来源于stack exchange,提问作者Sushila Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:13:23