ItSolutionStuff.com

Laravel Generate Unique Slug Example

By Hardik Savani • April 16, 2024
Laravel

Hello,

In this tutorial we will go over the demonstration of laravel generate unique slug. This article goes in detailed on laravel create unique slug example. i would like to share with you laravel generate slug before save. i would like to share with you how to generate unique slug in laravel.

you can easily create unique slug in laravel 6, laravel 7, laravel 8, laravel 9, laravel 10 and laravel 11 version.

Sometime we need to create slug from title with your application. but you also need to create unique slug on that table. might be user will enter same title then it should automatically generate unique slug. i will give you simple example step by step how to generate unique slug in laravel using eloquent model events.

Let's see step by step to create unique slug in laravel example:

app/Models/Product.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Support\Str;

class Product extends Model

{

use HasFactory;

protected $fillable = [

'title', 'detail', 'slug'

];

/**

* Boot the model.

*/

protected static function boot()

{

parent::boot();

static::created(function ($product) {

$product->slug = $product->createSlug($product->title);

$product->save();

});

}

/**

* Write code on Method

*

* @return response()

*/

private function createSlug($title){

if (static::whereSlug($slug = Str::slug($title))->exists()) {

$max = static::whereTitle($title)->latest('id')->skip(1)->value('slug');

if (is_numeric($max[-1])) {

return preg_replace_callback('/(\d+)$/', function ($mathces) {

return $mathces[1] + 1;

}, $max);

}

return "{$slug}-2";

}

return $slug;

}

}

Controller Code:

<?php

namespace App\Http\Controllers;

use App\Models\Product;

use Illuminate\Http\Request;

class ProductController extends Controller

{

/**

* Display a listing of the resource.

*

* @return \Illuminate\Http\Response

*/

public function index()

{

$product = Product::create([

"title" => "Laravel 8 Image Upload"

]);

dd($product);

}

}

now if you create multiple time same title record then it will create slug as bellow:

laravel-8-image-upload

laravel-8-image-upload-2

laravel-8-image-upload-3

laravel-8-image-upload-4

now you can try it and check it.

i hope it can help you...

Tags: Laravel
Hardik Savani

Hardik Savani

I'm a full-stack developer, entrepreneur, and founder of ItSolutionStuff.com. Passionate about PHP, Laravel, JavaScript, and helping developers grow.

📺 Subscribe on YouTube

We Are Recommending You

Laravel 8 Fullcalendar with Create|Edit|Delete Event Example

Read Now →

How to use Model Events in Laravel 8?

Read Now →

Laravel Eloquent Group By Example

Read Now →

Delete All Records from Table in Laravel Eloquent

Read Now →

Laravel Eloquent whereNull() Query Example

Read Now →

Laravel Model Disable created_at and updated_at Update Record

Read Now →

How to Create SEO Friendly Sluggable URL in Laravel?

Read Now →

How to disable model timestamps in Laravel?

Read Now →

How to Get Table Name from Model in Laravel?

Read Now →

Laravel Generate Slug from Title Example

Read Now →

Laravel Eloquent Where Like Query Example Tutorial

Read Now →