1. Go to this page and download the library: Download utopia-php/database library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
utopia-php / database example snippets
use PDO;
use Utopia\Database\Database;
use Utopia\Cache\Cache;
use Utopia\Cache\Adapter\Memory;
use Utopia\Database\Adapter\MariaDB;
$dbHost = 'mariadb';
$dbPort = '3306';
$dbUser = 'root';
$dbPass = 'password';
$pdoConfig = [
PDO::ATTR_TIMEOUT => 3, // Seconds
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_STRINGIFY_FETCHES => true,
];
$pdo = new PDO("mysql:host={$dbHost};port={$dbPort};charset=utf8mb4", $dbUser, $dbPass, $pdoConfig);
$cache = new Cache(new Memory()); // or use any cache adapter you wish
$database = new Database(new MariaDB($pdo), $cache);
use PDO;
use Utopia\Database\Database;
use Utopia\Cache\Cache;
use Utopia\Cache\Adapter\Memory;
use Utopia\Database\Adapter\MySQL;
$dbHost = 'mysql';
$dbPort = '3306';
$dbUser = 'root';
$dbPass = 'password';
$pdoConfig = [
PDO::ATTR_TIMEOUT => 3, // Seconds
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_STRINGIFY_FETCHES => true,
];
$pdo = new PDO("mysql:host={$dbHost};port={$dbPort};charset=utf8mb4", $dbUser, $dbPass, $pdoConfig);
$cache = new Cache(new Memory()); // or use any cache adapter you wish
$database = new Database(new MySql($pdo), $cache);
use PDO;
use Utopia\Database\Database;
use Utopia\Cache\Cache;
use Utopia\Cache\Adapter\Memory;
use Utopia\Database\Adapter\Postgres;
$dbHost = 'postgres';
$dbPort = '5432';
$dbUser = 'root';
$dbPass = 'password';
$pdoConfig = [
PDO::ATTR_TIMEOUT => 3, // Seconds
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_STRINGIFY_FETCHES => true,
];
$pdo = new PDO("pgsql:host={$dbHost};port={$dbPort};charset=utf8mb4", $dbUser, $dbPass, $pdoConfig);
$cache = new Cache(new Memory()); // or use any cache adapter you wish
$database = new Database(new Postgres($pdo), $cache);
use PDO;
use Utopia\Database\Database;
use Utopia\Cache\Cache;
use Utopia\Cache\Adapter\Memory;
use Utopia\Database\Adapter\SQLite;
$dbPath = '/path/to/database.sqlite';
$pdoConfig = [
PDO::ATTR_TIMEOUT => 3, // Seconds
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_STRINGIFY_FETCHES => true,
];
$pdo = new PDO("{$dbPath}", $pdoConfig);
$cache = new Cache(new Memory()); // or use any cache adapter you wish
$database = new Database(new SQLite($pdo), $cache);
use Utopia\Database\Database;
use Utopia\Cache\Cache;
use Utopia\Cache\Adapter\Memory;
use Utopia\Database\Adapter\Mongo;
use Utopia\Mongo\Client; // from utopia-php/mongo
$dbHost = 'mongo';
$dbPort = 27017;
$dbUser = 'root';
$dbPass = 'password';
$dbName = 'dbName';
$mongoClient = new Client($dbName, $dbHost, $dbPort, $dbUser, $dbPass, true);
$cache = new Cache(new Memory()); // or use any cache adapter you wish
$database = new Database(new Mongo($client), $cache);
// Get namespace
$database->getNamespace();
// Sets namespace that prefixes all collection names
$database->setNamespace(
namespace: 'namespace'
);
// Get default database
$database->getDatabase();
// Sets default database
$database->setDatabase(
name: 'dbName'
);
// Creates a new database.
// Uses default database as the name.
$database->create();
// Returns an array of all databases
$database->list();
// Delete database
$database->delete(
name: 'mydb'
);
// Ping database it returns true if the database is alive
$database->ping();
// Check if database exists
$database->exists(
database: 'mydb'
);
// Check if collection exists
$database->exists(
database: 'mydb',
collection: 'users'
);
// Listen to events
// Event Types
Database::EVENT_ALL
Database::EVENT_DATABASE_CREATE,
Database::EVENT_DATABASE_LIST,
Database::EVENT_COLLECTION_CREATE,
Database::EVENT_COLLECTION_LIST,
Database::EVENT_COLLECTION_READ,
Database::EVENT_ATTRIBUTE_CREATE,
Database::EVENT_ATTRIBUTE_UPDATE,
Database::EVENT_INDEX_CREATE,
Database::EVENT_DOCUMENT_CREATE,
Database::EVENT_DOCUMENT_UPDATE,
Database::EVENT_DOCUMENT_READ,
Database::EVENT_DOCUMENT_FIND,
Database::EVENT_DOCUMENT_FIND,
Database::EVENT_DOCUMENT_COUNT,
Database::EVENT_DOCUMENT_SUM,
Database::EVENT_DOCUMENT_INCREASE,
Database::EVENT_DOCUMENT_DECREASE,
Database::EVENT_INDEX_DELETE,
Database::EVENT_DOCUMENT_DELETE,
Database::EVENT_ATTRIBUTE_DELETE,
Database::EVENT_COLLECTION_DELETE,
Database::EVENT_DATABASE_DELETE,
$database->on(
Database::EVENT_ALL,
function($event, $data) {
// Do something
}
);
// Get Database Adapter
$database->getAdapter();
// Get List of keywords that cannot be used
$database->getKeywords();
// Creates two new collection named '$namespace_$collectionName' with attribute names '_id', '_uid', '_createdAt', '_updatedAt', '_permissions'
// The second collection is named '$namespace_$collectionName_perms' with attribute names '_id', '_type', '_permission', '_document'
$database->createCollection(
name: 'users'
);
// Create collection with attributes and indexes
$attributes = [
new Document([
'$id' => ID::unique(),
'$permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any())
],
'name' => 'Jhon',
'age' => 20
]),
new Document([
'$id' => ID::unique(),
'$permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any())
],
'name' => 'Doe',
'age' => 34
]),
]
$indexes = [
new Document([
'$id' => ID::unique(),
'type' => Database::INDEX_KEY,
'attributes' => ['name'],
'lengths' => [256],
'orders' => ['ASC'],
]),
new Document([
'$id' => ID::unique(),
'type' => Database::INDEX_KEY,
'attributes' => ['name', 'age'],
'lengths' => [128, 128],
'orders' => ['ASC'],
])
];
$database->createCollection(
name: 'users',
attributes: $attributes,
indexes: $indexes
);
// Update Collection Permissions
$database->updateCollection(
id: 'users',
permissions: [
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any())
],
documentSecurity: true
);
// Get Collection
$database->getCollection(
id: 'users'
);
// List Collections
$database->listCollections(
limit: 25,
offset: 0
);
// Deletes the two collections named 'namespace_$collectionName' and 'namespace_$collectionName_perms'
$database->deleteCollection(
id: 'users'
);
// Delete cached documents of a collection
$database->purgeCachedCollection(
collection: 'users'
);
// Data types
Database::VAR_STRING
Database::VAR_INTEGER
Database::VAR_FLOAT
Database::VAR_BOOLEAN
Database::VAR_DATETIME
// Creates a new attribute named '$attributeName' in the '$namespace_$collectionName' collection.
$database->createAttribute(
collection: 'movies',
id: 'name',
type: Database::VAR_STRING,
size: 128,
Name' in the '$namespace_$collectionName' collection.
$database-> updateAttribute(
collection: 'movies',
id: 'genres',
type: Database::VAR_STRING,
size: 128,
ormatOptions: []
);
// Update the attribute filters
$database->updateAttributeFilters(
collection: 'movies',
id: 'genres',
filters: []
);
// Update the default value of an attribute
$database->updateAttributeDefault(
collection: 'movies',
id: 'genres',
default: 'sci-fi'
);
// Check if attribute can be added to a collection
$collection = $database->getCollection('movies');
$attribute = new Document([
'$id' => ID::unique(),
'type' => Database::VAR_INTEGER,
'size' => 256,
'
// Index types
Database::INDEX_KEY,
Database::INDEX_FULLTEXT
Database::INDEX_UNIQUE
Database::INDEX_SPATIAL
Database::INDEX_ARRAY
// Insertion Order
Database::ORDER_ASC
Database::ORDER_DESC
// Creates a new index named '$indexName' in the '$namespace_$collectionName' collection.
// Note: The size for the index will be taken from the size of the attribute
$database->createIndex(
collection: 'movies',
id: 'index1', Database::INDEX_KEY,
attributes: ['name', 'genres'],
lengths: [128,128],
orders: [Database::ORDER_ASC, Database::ORDER_DESC]
);
// Rename index from old to new in the '$namespace_$collectionName' collection.
$database->renameIndex(
collection: 'movies',
old: 'index1',
new: 'index2'
);
// Deletes the index in the '$namespace_$collectionName' collection.
$database->deleteIndex(
collection: 'movies',
id: 'index2'
);
// Relationship types
Database::RELATION_ONE_TO_ONE
Database::RELATION_ONE_TO_MANY
Database::RELATION_MANY_TO_ONE
Database::RELATION_MANY_TO_MANY
// Creates a relationship between the two collections with the default reference attributes
$database->createRelationship(
collection: 'movies',
relatedCollection: 'users',
type: Database::RELATION_ONE_TO_ONE,
twoWay: true
);
// Create a relationship with custom reference attributes
$database->createRelationship(
collection: 'movies',
relatedCollection: 'users',
type: Database::RELATION_ONE_TO_ONE,
twoWay: true,
id: 'movies_id',
twoWayKey: 'users_id'
);
// Relationship onDelete types
Database::RELATION_MUTATE_CASCADE,
Database::RELATION_MUTATE_SET_NULL,
Database::RELATION_MUTATE_RESTRICT,
// Update the relationship with the default reference attributes
$database->updateRelationship(
collection: 'movies',
id: 'users',
onDelete: Database::RELATION_MUTATE_CASCADE
);
// Update the relationship with custom reference attributes
$database->updateRelationship(
collection: 'movies',
id: 'users',
onDelete: Database::RELATION_MUTATE_CASCADE,
newKey: 'movies_id',
newTwoWayKey: 'users_id',
twoWay: true
);
// Delete the relationship with the default or custom reference attributes
$database->deleteRelationship(
collection: 'movies',
id: 'users'
);
use Utopia\Database\Document;
use Utopia\Database\Helpers\ID;
use Utopia\Database\Helpers\Permission;
use Utopia\Database\Helpers\Role;
// Id helpers
ID::unique(padding: 12) // Creates an id of length 7 + padding
ID::custom(id: 'my_user_3235')
// Role helpers
Role::any()
Role::guests()
Role::user(
identifier: ID::unique()
status: 'active' //optional
)
Role::users()
Role::team(
identifier: ID::unique()
)
Role::team(
identifier: ID::unique()
dimension: '123' //team:id/dimension
)
Role::label(
identifier: 'admin'
)
Role::members(
identifier: ID::unique()
)
// Permission helpers
Permission::read(Role::any()),
Permission::create(Role::user(ID::unique())),
Permission::update(Role::user(ID::unique(padding: 23))),
Permission::delete(Role::user(ID::custom(id: 'my_user_3235'))
// To create a document
$document = new Document([
'$permissions' => [
Permission::read(Role::any()),
Permission::create(Role::user(ID::custom('1x'))),
Permission::update(Role::user(ID::unique(12))),
Permission::delete(Role::user($customId)),
],
'$id' => ID::unique(),
'name' => 'Captain Marvel',
'director' => 'Anna Boden & Ryan Fleck',
'year' => 2019,
'price' => 25.99,
'active' => true,
'genres' => ['science fiction', 'action', 'comics'],
]);
$document = $database->createDocument(
collection: 'movies',
document: $document
);
// Get which collection a document belongs to
$document->getCollection();
// Get document id
$document->getId();
// Check whether document in empty
$document->isEmpty();
// Increase an attribute in a document
$database->increaseDocumentAttribute(
collection: 'movies',
id: $document->getId(),
attribute: 'name',
value: 24,
max: 100
);
// Decrease an attribute in a document
$database->decreaseDocumentAttribute(
collection: 'movies',
id: $document->getId(),
attribute: 'name',
value: 24,
min: 100
);
// Update the value of an attribute in a document
// Set types
Document::SET_TYPE_ASSIGN, // Assign the new value directly
Document::SET_TYPE_APPEND, // Append the new value to end of the array
Document::SET_TYPE_PREPEND // Prepend the new value to start of the array
Note: Using append/prepend with an attribute which is not an array, it will be set to an array containing the new value.
$document->setAttribute(key: 'name', 'Chris Smoove')
->setAttribute(key: 'age', 33, Document::SET_TYPE_ASSIGN);
$database->updateDocument(
collection: 'users',
id: $document->getId(),
document: $document
);
// Update the permissions of a document
$document->setAttribute('$permissions', Permission::read(Role::any()), Document::SET_TYPE_APPEND)
->setAttribute('$permissions', Permission::create(Role::any()), Document::SET_TYPE_APPEND)
->setAttribute('$permissions', Permission::update(Role::any()), Document::SET_TYPE_APPEND)
->setAttribute('$permissions', Permission::delete(Role::any()), Document::SET_TYPE_APPEND)
$database->updateDocument(
collection: 'users',
id: $document->getId(),
document: $document
);
// Info regarding who has permission to read, create, update and delete a document
$document->getRead(); // returns an array of roles that have permission to read the document
$document->getCreate(); // returns an array of roles that have permission to create the document
$document->getUpdate(); // returns an array of roles that have permission to update the document
$document->getDelete(); // returns an array of roles that have permission to delete the document
// Get document with all attributes
$database->getDocument(
collection: 'movies',
id: $document->getId()
);
// Get document with a sub-set of attributes
$database->getDocument(
collection: 'movies',
id: $document->getId(),
queries: [
Query::select(['name', 'director', 'year'])
]
);
// Find documents
// Query Types
Query::equal(attribute: "...", values: ["...", "..."]),
Query::notEqual(attribute: "...", value: "..."),
Query::lessThan(attribute: "...", value: 100),
Query::lessThanEqual(attribute: "...", value: 1000),
Query::greaterThan(attribute: "...", value: 1000),
Query::greaterThanEqual(attribute: "...", value: ...),
Query::contains(attribute: "...", values: ["...", "..."]),
Query::between(attribute: "...", start: 100, end: 1000),
Query::search(attribute: "...", value: "..."),
Query::select(attributes: ["...", "..."]),
Query::orderDesc(attribute: "..."),
Query::orderAsc(attribute: "..."),
Query::isNull(attribute: "..."),
Query::isNotNull(attribute: "..."),
Query::startsWith(attribute: "...", value: "..."),
Query::endsWith(attribute: "...", value: "..."),
Query::limit(value: 35),
Query::offset(value: 0),
$database->find(
collection: 'movies',
queries: [
Query::equal(attribute: 'name', values: ['Captain Marvel']),
Query::notEqual(attribute: 'year', values: [2019])
],
timeout: 1 //timeout is optional
);
// Find a document
$database->findOne(
collection: 'movies',
queries: [
Query::equal(attribute: 'name', values: ['Captain Marvel']),
Query::lessThan(attribute: 'year', value: 2019)
]
);
// Get count of documents
$database->count(
collection: 'movies',
queries: [
Query::equal(attribute: 'name', values: ['Captain Marvel']),
Query::greaterThan(attribute: 'year', value: 2019)
],
max: 1000 // Max is optional
);
// Get the sum of an attribute from all the documents
$database->sum(
collection: 'movies',
attribute: 'price',
queries: [
Query::greaterThan(attribute: 'year', value: 2019)
],
max: null // max = null means no limit
);
// Delete a document
$database->deleteDocument(
collection: 'movies',
id: $document->getId()
);
// Delete a cached document
Note: Cached Documents or Collections are automatically deleted when a document or collection is updated or deleted
$database->purgeCachedDocument(
collection: 'movies',
id: $document->getId()
);
bash
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.