parables/laravel-model-nanoid
Pros:
id for joins, nanoId for URLs/APIs).Cons:
nanoId column) and potential data migration if retrofitting.id is retained for joins, indexing nanoId is necessary for performance, adding overhead to schema design.HasNanoId), requiring minimal boilerplate.where('nano_id', $value)).utf8mb4_unicode_ci) for case-insensitive NanoID lookups.nanoId as a secondary key (not primary) to avoid performance pitfalls with string-based queries.ai/nanoid (PHP port), which is actively maintained but not as widely adopted as UUID libraries. Monitor for breaking changes.nanoId column).nanoId improves lookup speed for string-based queries but may slow down bulk inserts if not optimized.nanoId vs. id)?nanoId column in the schema? (e.g., DB team, backend team).HasNanoId trait to auto-generate NanoIDs on model creation.nanoId column (e.g., string or varchar(255)) to relevant tables./users/{nanoId}) and responses.Schema::table('users', function (Blueprint $table) {
$table->string('nano_id')->unique()->index(); // Index for lookups
// Keep auto-increment `id` for joins
});
nano_id for fast lookups.nano_id the primary key (use id for foreign keys).Log, Event) to test NanoID generation and validation.nano_id column to target tables via migrations.User::chunk(1000, function ($users) {
foreach ($users as $user) {
$user->nano_id = Str::uuid(); // Replace with NanoID
$user->save();
}
});
nanoId.Rule::exists('users', 'nano_id')).nanoId:
User::where('nano_id', $request->nano_id)->first();
composer.json for exact requirements).ai/nanoid dependency).utf8mb4_bin for case-sensitive comparisons).webpatser/laravel-uuid). Audit dependencies.composer require parables/laravel-model-nanoid
config/services.php.'nanoid' => [
'alphabet' => '0123456789abcdefghijklmnopqrstuvwxyz',
'size' => 21,
],
use Parables\LaravelModelNanoid\HasNanoId;
class User extends Model
{
use HasNanoId;
}
How can I help you explore Laravel packages today?