Download the PHP package parables/laravel-model-nanoid without Composer
On this page you can find all versions of the php package parables/laravel-model-nanoid. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package laravel-model-nanoid
Laravel Model UUIDs
Introduction
Huge thanks to Micheal Dyrynda, whose work inspired me to create this package based on laravel-model-nanoid but uses NanoId instead of UUID.
Why NanoID?
<img src="https://ai.github.io/nanoid/logo.svg" align="right" alt="Nano ID logo by Anton Lovchikov" width="180" height="94">
A tiny, secure, URL-friendly, unique string ID generator for PHP.
This package is PHP implementation of ai's nanoId. Read its documentation for more information.
- Fast. It is faster than NanoID.
- Safe. It uses cryptographically strong random APIs. Can be used in clusters.
- Compact. It uses a larger alphabet than NanoID (
A-Za-z0-9_-
). So ID size was reduced from 36 to 21 symbols. - Customizable. Size, alphabet and Random Bytes Generator may be overridden.
Note: this package explicitly does not disable auto-incrementing on your Eloquent models. In terms of database indexing, it is generally more efficient to use auto-incrementing integers for your internal querying. Indexing your
nanoId
column will make lookups against that column fast, without impacting queries between related models.
Installation
This package is installed via Composer. To install, run the following command.
Code Samples
In order to use this package, you simply need to import and use the trait within your Eloquent models.
It is assumed that you already have a field named nanoId
in your database, which is used to store the generated value. If you wish to use a custom column name, for example if you want your primary id
column to be a NanoID
, you can define a static nanoIdColumn
method in your model.
Use NanoId as primary key
If you choose to use a NanoID as your primary model key (id
), then use GeneratesNanoIdAsPrimaryKey
trait on your model.
And update your migrations
This trait also provides a query scope which will allow you to easily find your records based on their NanoID, and respects any custom field name you choose.
Route model binding
Should you wish to leverage implicit route model binding on your nanoId
field, you may use the BindsOnNanoId
trait, which will use the value returned by nanoIdColumn()
. Should you require additional control over the binding, you may override the getRouteKeyName
method directly.
You can generate multiple NanoID columns for a model by returning an array of column names in the nanoIdColumns()
method.
If you use the nanoIdColumns()
method, then first element in the array must be the value returned by the nanoIdColumn()
method which by default is nanoId
. If you overwrite the nanoIdColumn()
method, put its return value as the first element in the nanoIdColumns()
return array.
When querying using the whereNanoId()
scope, the default column - specified by nanoIdColumn()
will be used.
The nanoIdColumns
must return an array. You can customize the generated NanoId
for each column by using an associative array where the key is the column name and the value is an array with an optional int size
and string alphabet
keys.
The following options are available for the alphabet key.
Support
If you are having general issues with this package, feel free to contact me on Twitter.
If you believe you have found an issue, please report it using the GitHub issue tracker, or better yet, fork the repository and submit a pull request.
If you're using this package, I'd love to hear your thoughts. Thanks!
Treeware
You're free to use this package, but if it makes it to your production environment you are required to buy the world a tree.
It’s now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to plant trees. If you support this package and contribute to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
You can buy trees here
Read more about Treeware at treeware.earth
Tools
- ID size calculator shows collision probability when adjusting the ID alphabet or size.
Credits
- Andrey Sitnik ai for Nano ID.
- Michael Dyrynda michaeldyrynda for laravel-model-uuid.
- Stanislav Lashmanov CyberAP for Predefined character sets to use with Nano ID.
All versions of laravel-model-nanoid with dependencies
illuminate/database Version ^10.0|^11.0
illuminate/events Version ^10.0|^11.0
illuminate/support Version ^10.0|^11.0
snortlin/nano-id Version ^1.0.0