My UUID
Simplifies using UUIDs in MySQL and Laravel
https://noolan.github.io/my-uuid/
Install
composer require noolan/my-uuid
Configure
Copy Config File
php artisan vendor:publish --provider Noolan\\MyUuid\\Service
The settings for this package can now be edited in config/myuuid.php
.
Available Settings
Key | Type | Default | Description |
---|---|---|---|
mysql_8 |
Boolean | true |
MySQL 8 adds two new functions, UUID_TO_BIN and BIN_TO_UUID that simplify working with UUIDs.If mysql_8 is true, those new functions will be used instead of the mashup of HEX , UNHEX , and REPLACE that is otherwise required.If you are unsure which version of MySQL you have you can run the php artisan myuuid:version command detailed below. |
connection |
String | '' (empty string) |
The name of the database connection to use as defined in your config/database.php file.An empty string will result in your default connection being used. |
Checking Configuration
There are two Artisan commands included with this package that help with configuration; version
and check
.
Command | Arguments | Description | Example |
---|---|---|---|
myuuid:version |
(none) | Outputs the MySQL version of the configured connection. | php artisan myuuid:version |
myuuid:check |
(none) | Checks the current configuration against the database to see if there are issues. | php artisan myuuid:check |
Usage
Instantiation
All the functionality is accessed through the MyUuid
facade.
use MyUuid;
/* ... */
public function doAThing()
{
$myUuid = MyUuid::alter('examples');
/* ... */
}
Chaining
Most methods on the MyUuid class return the object so methods can be chained.
$myUuid->addColumn('uuid', 'blob', 16)
$myUuid->addColumn('parent_id', 'varbinary', 36)
$myUuid->addIndex();
$myUuid->run();
// Can be re-written as:
$myUuid->addColumn('uuid', 'blob', 16)
->addColumn('parent_id', 'varbinary', 36)->addIndex()
->run();
*Note:* If a non-column function is called without a column name parameter, MyUuid uses the last added column as a default.
Convenience Functions
There are several functions that make it easy to perform common tasks as long as you don’t need to deviate from the default parameters.
/* Add an auto-populating, 16 byte, binary column named 'id'
and use it as the table's primary key */
$myUuid->addPrimaryUuid('id');
// is equivalent to:
$myUuid->addColumn('id', 'binary', 16)
->addIndex('primary')
->addTrigger();
Executing Queries and Rolling Back Migrations
Columns and indexes created with MyUuid can be dropped with Laravel’s Schema builder. The only thing you have to manually drop is triggers.
// removes auto-population trigger attached to the 'id' column
$myUuid->dropTrigger('id')->run();
API
Uuid Methods
- alter
-
(String $table)
returns: new UuidSchema - getVersion
-
()
returns: String MySql version - getTrustFunctionCreatorsSetting
-
()
returns: Boolean on
UuidSchema Methods
- addColumn
-
(String $name, [String $type, Integer $length, String $virtualTarget])
returns: UuidSchema self - addIndex
-
([String $type, String $column, String $cname, Integer $length])
returns: UuidSchema self - addTrigger
-
([String $column])
returns: UuidSchema self - dropTrigger
- (String $column) returns: UuidSchema self
- run
- () returns: null
UuidSchema Convenience Methods
- addPrimaryUuid
-
(String $name)
returns: UuidSchema self - addAutoUuid
-
(String $name)
returns: UuidSchema self - addFriendlyUuid
-
(String $name, String $target)
returns: UuidSchema self - withFriendly
-
(String $target)
returns: UuidSchema self - addIndexedUuid
-
(String $name)
returns: UuidSchema self - index
-
([String $type])
returns: UuidSchema self - addForeignUuid
-
(String $name)
returns: UuidSchema self
Example
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use MyUuid;
class CreateExamplesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('examples', function (Blueprint $table) {
$table->timestamps();
$table->softDeletes();
$table->string('title')->index();
$table->text('description');
$table->longText('code');
});
MyUuid::alter('examples')
->addPrimaryUuid('id')->withFriendly('uuid')
->addForeignUuid('category_id')
->run();
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
MyUuid::alter('examples')->dropTrigger('id')->run();
Schema::dropIfExists('characters');
}
}