我有一个名为short_urls
的数据库表,其中包含一个网址列表及其简短的'路径。
需要注意的主要领域是:
$table->string('url')->unique();
$table->string('full_path');
我想知道Laravel 5.5中是否有一种方法可以自动为url
字段添加一个数字(如果它已经存在)。
例如,如果我使用DatabaseSeeder
填充数据库并为ModelFactory
创建ShortUrl
,请执行以下操作:
$factory->define(App\Models\Route::class, function (Faker $faker) {
return [
'url' => $faker->slug,
'full_path' => $faker->url
]
});
在DatabaseSeeder
我做了类似的事情:
$shortUrl1 = factory(ShortUrl::class)->create([
'url' => 'my-short-url'
])
$shortUrl2 = factory(ShortUrl::class)->create([
'url' => 'my-short-url'
])
我想知道是否有办法确保在创建第二个ShortUrl
时$shortUrl2
)...
...它可以自动检测到数据库中的记录是否已存在,并且正在尝试设置url
...
...然后应将其设置为url => 'my-short-url-2'
由于
答案 0 :(得分:1)
你可以做的是在将url插入数据库之前强制执行检查,以便我们可以知道url是否重复然后相应地附加一个数字,这里是一个示例
然后从控制器中调用
private function getUniqueUrl($url)
{
$slug = str_slug(trim($url), '-');
$existingCount = Url::where('url', 'like', $slug . '-%')->count();
if($existingCount)
{
return $slug . '-' . ($existingCount);
}
return $slug
}
使用$slug
插入数据库;