【发布时间】: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 上附加什么数字以使其独一无二
【问题讨论】:
-
SELECT * FROM users where slug like '% john-doe%'? -
您可以附加用户ID。这将确保它是独一无二的。
-
GitHub 上已经有一些不错的解决方案。在那里搜索“laravel slug”。