Laravel 5.5:'自动增量'数据库中存在唯一字段

时间:2018-02-12 12:37:06

标签: php laravel eloquent laravel-5.5

我有一个名为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'

由于

1 个答案:

答案 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插入数据库;