UUIDs
RedBeanPHP has not been designed for use with UUIDs or GUIDs. However if you really want, you can tune RedBeanPHP to support this.
Enabling UUID support in MySQL
To enable UUID support in MySQL in fluid and frozen mode you need to provide your own QueryWriter. Here is an example of a QueryWriter that enables UUIDs in MySQL:
class UUIDWriterMySQL extends MySQL {
protected $defaultValue = '@uuid';
const C_DATATYPE_SPECIAL_UUID = 97;
public function __construct( Adapter $adapter ) {
parent::__construct( $adapter );
$this->addDataType(
self::C_DATATYPE_SPECIAL_UUID, 'char(36)' );
}
public function createTable( $table ) {
$table = $this->esc( $table );
$sql = "
CREATE TABLE {$table} (
id char(36) NOT NULL,
PRIMARY KEY ( id ))
ENGINE = InnoDB DEFAULT
CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci ";
$this->adapter->exec( $sql );
}
public function updateRecord( $table, $updateValues, $id = NULL ) {
$flagNeedsReturnID = (!$id);
if ($flagNeedsReturnID) R::exec('SET @uuid = uuid() ');
$id = parent::updateRecord( $table, $updateValues, $id );
if ($flagNeedsReturnID ) $id = R::getCell('SELECT @uuid');
return $id;
}
public function getTypeForID(){
return self::C_DATATYPE_SPECIAL_UUID;
}
}
Now you need to rewire the objects to swap the old Query Writer for the new one:
$oldToolBox = R::getToolBox();
$oldAdapter = $oldToolBox->getDatabaseAdapter();
$uuidWriter = new UUIDWriterMySQL( $oldAdapter );
$newRedBean = new OODB( $uuidWriter );
$newToolBox = new ToolBox( $newRedBean, $oldAdapter, $uuidWriter );
R::configureFacadeWithToolbox( $newToolBox );
Depending on the namespaces and aliases you use you might have to adjust this code accordingly.
Enabling UUID support in PostgreSQL
To install the UUID module for PostgreSQL run the following query:
CREATE EXTENSION "uuid-ossp";
This command requires at least PostgreSQL version 9.1, for earlier versions of Postgres please consult their documentation.
Here is an example class for PostgreSQL:
class UUIDWriterPostgres extends PostgreSQL {
protected $defaultValue = 'uuid_generate_v4()';
const C_DATATYPE_SPECIAL_UUID = 97;
public function __construct( Adapter $adapter ){
parent::__construct( $adapter );
$this->addDataType( self::C_DATATYPE_SPECIAL_UUID, 'uuid' );
}
public function createTable( $table ){
$table = $this->esc( $table );
$this->adapter->exec( "
CREATE TABLE $table (id uuid PRIMARY KEY); " );
}
public function getTypeForID(){
return self::C_DATATYPE_SPECIAL_UUID;
}
}
These are just examples, they allow you to use UUID but they may not fit your needs. I recommend to craft your own Query Writer, tailored to your needs.
back to main menu
Donate to RedBeanPHP using Monero:
47mmY3AVbRu 7zVVd4bxQnzD
2jR7PQtBJ cF93jWHQ
rP7yRED4qr fqu6G9Q8ZNu7
zqwnB28rz76 w7MaExf
mALVg69yFd 9sUmz
(remove spaces and new lines)
Performance monitor: this page has been generated in 0.028993129730225s.
Is the performance lacking? Please drop me an e-mail to notify me!
RedBeanPHP Easy ORM for PHP © 2024 Gabor de Mooij
() and the RedBeanPHP community
(credits) - Licensed New BSD/GPLv2 -
RedBeanPHP Archives
RedBeanPHP, the power ORM for PHP since 2009.
Privacy Statement