You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
3.1 KiB

<?php
namespace Glmdev\Meta;
use Glmdev\Foundation\FoundationModel;
use Glmdev\Meta\Contracts\MetaContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Blueprint;
use Ramsey\Uuid\Uuid;
class Meta extends Model implements FoundationModel, MetaContract
{
/**
* Allow the changing of the meta and uuid database fields.
*
* @var array
*/
protected $fillable = ['meta', 'uuid'];
/**
* Ensure the model recieves valid UUID and meta columns when created.
*
* @param array $args
*
* @return callable
*/
public static function create( array $args = [] ){
$args['meta'] = (isset($args['meta'])) ? $args['meta'] : serialize([]);
$args['uuid'] = (isset($args['uuid'])) ? $args['uuid'] : '';
return parent::create($args);
}
/**
* Read the serialized value.
*
* @param string|int $key
*
* @return string|int|float|array|bool|null
*/
public function read( $key ){
$meta = unserialize( $this->meta );
if ( array_key_exists( $key, $meta ) ){
return $meta[ $key ];
}
return null;
}
/**
* Adds the key-value pair into the serialized data set.
*
* @param string|int $key
* @param string|int|float|array|bool|null $value
*
* @return void
*/
public function write( $key, $value ){
$meta = unserialize( $this->meta );
$meta[ $key ] = $value;
$meta = serialize( $meta );
$this->meta = $meta;
$this->save();
}
/**
* Get the serialized value of the meta info.
*
* @return string
*/
public function readRaw(){
return $this->meta;
}
/**
* Set (override) the entire meta with an unmodified string.
*
* @param string $serialized
*
* @return void
*/
public function writeRaw( $serialized ){
$this->meta = $serialized;
$this->save();
}
/**
* Get the universal identifier of the model.
*
* @return \Ramsey\Uuid\Uuid
*/
public function getUUID(){
return $this->uuid;
}
/**
* Set the universal identifier of the model (can only be set once).
*
* @return void
*/
public function setUuid(){
if( is_null($this->uuid) || $this->uuid === "" ){
$this->uuid = Uuid::uuid4();
}
}
/**
* Ask if the model has a universal identifier.
*
* @return bool
*/
public function hasUuid(){
return ( isset($this->uuid) && $this->uuid !== "" );
}
/**
* Set the universal identifier via existing UUID.
*
* @param \Ramsey\Uuid\Uuid $uuid
*
* @return void
*/
public function setRawUuid( Uuid $uuid ){
$this->uuid = $uuid;
$this->save();
}
/**
* Add the UUID and Meta columns to the table.
*
* @param \Illuminate\Database\Schema\Blueprint
*
* @return void
*/
public static function formTable( Blueprint $table ){
$table->uuid('uuid');
$table->text('meta');
}
public static function route(){}
}