【问题标题】:creating a unique slug from name, check database existing slug从名称创建一个唯一的 slug,检查数据库现有 slug
【发布时间】:2020-09-27 10:04:52
【问题描述】:

我目前正在开发一个网络应用程序,它从用户那里获取一个名称并从中生成一个 slug。例如 John Doe -> john-doe。

slug 需要是唯一的,因为它是一个标识符,所以我目前正在做以下事情,

`$slug = Str::slug($slug);

    //make sure it's unqiue
    $uniqueSlug = User::where('slug', $slug)->count();
    if($uniqueSlug > 0) {
        $slug .= "-" . $uniqueSlug;
    }

`

如果存在像 john-doe 这样的 slug,这将创建 john-doe-1,问题是出现的下一个 john doe 也会尝试创建一个唯一的 john-doe-1 slug,因为查询是只寻找完全匹配。

有没有办法在数据库中搜索所有出现的 john-doe + john-doe-

这样我就知道要在 slug 上附加什么数字以使其独一无二

【问题讨论】:

标签: php laravel eloquent slug


【解决方案1】:

您可以使用composer require spatie/laravel-sluggable 包来生成唯一的 slug

<?php

namespace App;

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

class User extends Model
{
    use HasSlug;

    /**
     * Get the options for generating the slug.
     */
    public function getSlugOptions() : SlugOptions
    {
        return SlugOptions::create()
            ->generateSlugsFrom('name')
            ->saveSlugsTo('slug');
    }
}

【讨论】:

  • 是的,这是可以为您处理这个问题的几个可用包之一(也是我个人最喜欢的;Spatie 的东西总是经过深思熟虑和维护)。
猜你喜欢
  • 2023-02-25
  • 1970-01-01
  • 2023-03-04
  • 2018-06-03
  • 2014-02-10
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多