Append a incrementing number to a slug username
Searching for the slug duplicate in the database can be done in a more fast and straightforward way, by using = operator instead of like, and not using orderBy;
To be on the safe side, it's worth to make searches in a loop, incrementing the $next on each step;


So, it might look like this:

protected function create(array $data)
{
    $slug = $maybe_slug = strtolower($data['first_name'] . '.' . $data['last_name']);
    $next = 2;

    while (User::where('slug', '=', $slug)-&gt;first()) {
        $slug = "{$maybe_slug}.{$next}";
        $next++;
    }

    return User::create([
                'first_name' =&gt; $data['first_name'],
                'last_name' =&gt; $data['last_name'],
                'slug' =&gt; $slug,
                'email' =&gt; $data['email'],
                'password' =&gt; bcrypt($data['password']),
    ]);
}