Attempting to use this, but when saving no UUID is entered into the db.
Here is my setup:
DB: Name: uuid char(36) utf8mb4_unicode_ci
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
use Emadadly\LaravelUuid\Uuids;
class Account extends Model
{
use Uuids;
protected $fillable = [
'name', 'tname', 'short', 'uuid'
];
protected $guarded = [
'id'
];
Controller:
public function saveUUID(Account $account){
$example = new Account;
$example->name = 'test';
$example->short = 'FIVE';
$example->industry_id = 1;
$example->user_id = 1;
$example->status_id = 36;
$example->save();
return response()->json(['example' => $example]);
}
The uuid field is left null, and the response for $example does not include the uuid.
What am i missing or doing wrong?
I would personally create a UUID trait like the following.
<?php
use Ramsey\Uuid\Uuid;
trait HasUuid
{
protected static function bootHasUuid()
{
/**
* Attach to the 'creating' Model Event to provide a UUID
* for the `uuid` field
*/
static::creating(function ($model) {
$columnName = static::getUuidColumn();
$model->$columnName = Uuid::uuid4();
});
}
/* Getters and Setters */
public function getUuidAttribute()
{
$columnName = static::getUuidColumn();
return $this->attributes[$columnName];
}
protected static function getUuidColumn()
{
if (isset(static::$uuidColumn)) {
return static::$uuidColumn;
}
return 'uuid';
}
Now in you model you can include HasUuid trait
<?php
class Model {
use HasUuid
//.....
}
FYI if your uuid field is called something else in you class model you can declare the filed like so static $uuidColumn = 'user_uuid':
.
Trait will handle the rest
Update: Laravel (Unsure of when or what version they added this trait) comes with HasUuids trait that will make your life easier.
<?php
use Illuminate\Database\Eloquent\Concerns\Uuid;
class Model {
use HasUuids
//.....
}