M1: 数据模型 + sablog:import 脚本(MySQL 8 验证通过,不迁移 trackback 等过时功能)
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Support;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class SlugGenerator
|
||||
{
|
||||
/**
|
||||
* 生成唯一 slug。中文标题自动回退为 $fallback 或 crc32 形式。
|
||||
*/
|
||||
public static function make(string $string, string $table, string $column = 'slug', ?int $ignoreId = null, ?string $fallback = null): string
|
||||
{
|
||||
$slug = Str::slug($string, '-', 'en');
|
||||
if ($slug === '' || $slug === null) {
|
||||
$slug = $fallback ?? $table.'-'.crc32($string);
|
||||
}
|
||||
|
||||
$base = $slug;
|
||||
$i = 2;
|
||||
|
||||
while (DB::table($table)->where($column, $slug)->where('id', '!=', $ignoreId ?? 0)->exists()) {
|
||||
$slug = $base.'-'.$i++;
|
||||
}
|
||||
|
||||
return $slug;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user