1. Go to this page and download the library: Download triagens/arangodb 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/ */
triagens / arangodb example snippets
\ArangoDBClient\Autoloader::init();
// use the following line when using Composer
// e __DIR__ . '/arangodb-php/autoload.php';
// set up some aliases for less typing later
use ArangoDBClient\Collection as ArangoCollection;
use ArangoDBClient\CollectionHandler as ArangoCollectionHandler;
use ArangoDBClient\Connection as ArangoConnection;
use ArangoDBClient\ConnectionOptions as ArangoConnectionOptions;
use ArangoDBClient\DocumentHandler as ArangoDocumentHandler;
use ArangoDBClient\Document as ArangoDocument;
use ArangoDBClient\Exception as ArangoException;
use ArangoDBClient\ConnectException as ArangoConnectException;
use ArangoDBClient\ClientException as ArangoClientException;
use ArangoDBClient\ServerException as ArangoServerException;
use ArangoDBClient\Statement as ArangoStatement;
use ArangoDBClient\UpdatePolicy as ArangoUpdatePolicy;
// set up some basic connection options
$connectionOptions = [
// database name
ArangoConnectionOptions::OPTION_DATABASE => '_system',
// server endpoint to connect to
ArangoConnectionOptions::OPTION_ENDPOINT => 'tcp://127.0.0.1:8529',
// authorization type to use (currently supported: 'Basic')
ArangoConnectionOptions::OPTION_AUTH_TYPE => 'Basic',
// user for basic authorization
ArangoConnectionOptions::OPTION_AUTH_USER => 'root',
// password for basic authorization
ArangoConnectionOptions::OPTION_AUTH_PASSWD => '',
// connection persistence on server. can use either 'Close' (one-time connections) or 'Keep-Alive' (re-used connections)
ArangoConnectionOptions::OPTION_CONNECTION => 'Keep-Alive',
// connect timeout in seconds
ArangoConnectionOptions::OPTION_TIMEOUT => 3,
// whether or not to reconnect when a keep-alive connection has timed out on server
ArangoConnectionOptions::OPTION_RECONNECT => true,
// optionally create new collections when inserting documents
ArangoConnectionOptions::OPTION_CREATE => true,
// optionally create new collections when inserting documents
ArangoConnectionOptions::OPTION_UPDATE_POLICY => ArangoUpdatePolicy::LAST,
];
// turn on exception logging (logs to whatever PHP is configured)
ArangoException::enableLogging();
$connection = new ArangoConnection($connectionOptions);
$connectionOptions = [
// memcached persistent id (will be passed to Memcached::__construct)
ArangoConnectionOptions::OPTION_MEMCACHED_PERSISTENT_ID => 'arangodb-php-pool',
// memcached servers to connect to (will be passed to Memcached::addServers)
ArangoConnectionOptions::OPTION_MEMCACHED_SERVERS => [ [ '127.0.0.1', 11211 ] ],
// memcached options (will be passed to Memcached::setOptions)
ArangoConnectionOptions::OPTION_MEMCACHED_OPTIONS => [ ],
// key to store the current endpoints array under
ArangoConnectionOptions::OPTION_MEMCACHED_ENDPOINTS_KEY => 'arangodb-php-endpoints'
// time-to-live for the endpoints array stored in memcached
ArangoConnectionOptions::OPTION_MEMCACHED_TTL => 600
];
$collectionHandler = new ArangoCollectionHandler($connection);
// clean up first
if ($collectionHandler->has('users')) {
$collectionHandler->drop('users');
}
if ($collectionHandler->has('example')) {
$collectionHandler->drop('example');
}
// create a new collection
$userCollection = new ArangoCollection();
$userCollection->setName('users');
$id = $collectionHandler->create($userCollection);
// print the collection id created by the server
var_dump($id);
// check if the collection exists
$result = $collectionHandler->has('users');
var_dump($result);
$handler = new ArangoDocumentHandler($connection);
// create a new document
$user = new ArangoDocument();
// use set method to set document properties
$user->set('name', 'John');
$user->set('age', 25);
$user->set('thisIsNull', null);
$user->set('obj', ['nested' => True]);
// use magic methods to set document properties
$user->likes = ['fishing', 'hiking', 'swimming'];
// send the document to the server
$id = $handler->save('users', $user);
// check if a document exists
$result = $handler->has('users', $id);
var_dump($result);
// print the document id created by the server
var_dump($id);
var_dump($user->getId());
try {
$handler = new ArangoDocumentHandler($connection);
// create a new document
$user = new ArangoDocument();
// use set method to set document properties
$user->set('name', 'John');
$user->set('age', 25);
// use magic methods to set document properties
$user->likes = ['fishing', 'hiking', 'swimming'];
// send the document to the server
$id = $handler->save('users', $user);
// check if a document exists
$result = $handler->has('users', $id);
var_dump($result);
// print the document id created by the server
var_dump($id);
var_dump($user->getId());
} catch (ArangoConnectException $e) {
print 'Connection error: ' . $e->getMessage() . PHP_EOL;
} catch (ArangoClientException $e) {
print 'Client error: ' . $e->getMessage() . PHP_EOL;
} catch (ArangoServerException $e) {
print 'Server error: ' . $e->getServerCode() . ':' . $e->getServerMessage() . ' ' . $e->getMessage() . PHP_EOL;
}
// get the document back from the server
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
/*
The result of the get() method is a Document object that you can use in an OO fashion:
object(ArangoDBClient\Document)##6 (4) {
["_id":"ArangoDBClient\Document":private]=>
string(15) "2377907/4818344"
["_rev":"ArangoDBClient\Document":private]=>
int(4818344)
["_values":"ArangoDBClient\Document":private]=>
array(3) {
["age"]=>
int(25)
["name"]=>
string(4) "John"
["likes"]=>
array(3) {
[0]=>
string(7) "fishing"
[1]=>
string(6) "hiking"
[2]=>
string(8) "swimming"
}
}
["_changed":"ArangoDBClient\Document":private]=>
bool(false)
}
*/
// get a document list back from the server, using a document example
$cursor = $collectionHandler->byExample('users', ['name' => 'John']);
var_dump($cursor->getAll());
// update a document removing an attribute,
// The 'keepNull'=>false option will cause ArangoDB to
// remove all attributes in the document,
// that have null as their value - not only the ones defined here
$userFromServer->likes = ['fishing', 'swimming'];
$userFromServer->state = 'CA';
$userFromServer->age = null;
$result = $handler->update($userFromServer, ['keepNull' => false]);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// update a document, identified by collection and document id
$user = new ArangoDocument();
$user->name = 'John';
$user->likes = ['Running', 'Rowing'];
// Notice that for the example we're getting the existing
// document id via a method call. Normally we would use the known id
$result = $handler->updateById('users', $userFromServer->getId(), $user);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// replace a document (notice that we are using the previously fetched document)
// In this example we are removing the state attribute
unset($userFromServer->state);
$result = $handler->replace($userFromServer);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// replace a document, identified by collection and document id
$user = new ArangoDocument();
$user->name = 'John';
$user->likes = ['Running', 'Rowing'];
// Notice that for the example we're getting the existing
// document id via a method call. Normally we would use the known id
$result = $handler->replaceById('users', $userFromServer->getId(), $user);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// remove a document on the server, using a document object
$result = $handler->remove($userFromServer);
var_dump($result);
// remove a document on the server, using a collection id and document id
// In this example, we are using the id of the document we deleted in the previous example,
// so it will throw an exception here. (we are catching it though, in order to continue)
try {
$result = $handler->removeById('users', $userFromServer->getId());
} catch (\ArangoDBClient\ServerException $e) {
$e->getMessage();
}
// drop a collection on the server, using its name,
$result = $collectionHandler->drop('users');
var_dump($result);
// drop the other one we created, too
$collectionHandler->drop('example');
// create a statement to insert 1000 test users
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR i IN 1..1000 INSERT { _key: CONCAT("test", i) } IN users'
]
);
// execute the statement
$cursor = $statement->execute();
// now run another query on the data, using bind parameters
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR u IN @@collection FILTER u.name == @name RETURN u',
'bindVars' => [
'@collection' => 'users',
'name' => 'John'
]
]
);
// executing the statement returns a cursor
$cursor = $statement->execute();
// easiest way to get all results returned by the cursor
var_dump($cursor->getAll());
// to get statistics for the query, use Cursor::getExtra();
var_dump($cursor->getExtra());
// run an AQL query that does not return documents but scalars
// we need to set the _flat attribute of the Statement in order for this to work
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR i IN 1..1000 RETURN i',
'_flat' => true
]
);
// executing the statement returns a cursor
$cursor = $statement->execute();
// easiest way to get all results returned by the cursor
// note that now the results won't be converted into Document objects
var_dump($cursor->getAll());
$exampleCollection = new ArangoCollection();
$exampleCollection->setName('example');
$id = $collectionHandler->create($exampleCollection);
// create a statement to insert 100 example documents
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR i IN 1..100 INSERT { _key: CONCAT("example", i), value: i } IN example'
]
);
$statement->execute();
// later on, we can assemble a list of document keys
$keys = [];
for ($i = 1; $i <= 100; ++$i) {
$keys[] = 'example' . $i;
}
// and fetch all the documents at once
$documents = $collectionHandler->lookupByKeys('example', $keys);
var_dump($documents);
// we can also bulk-remove them:
$result = $collectionHandler->removeByKeys('example', $keys);
var_dump($result);
$ch = new CollectionHandler($connection);
$ch->setDocumentClass('\AppBundle\Entity\Product');
$cursor = $ch->all('product');
// All returned documents will be \AppBundle\Entity\Product instances
$dh = new DocumentHandler($connection);
$dh->setDocumentClass('\AppBundle\Entity\Product');
$product = $dh->get('products', 11231234);
// Product will be \AppBundle\Entity\Product instance
use ArangoDBClient\Exception as ArangoException;
ArangoException::enableLogging();
use ArangoDBClient\Exception as ArangoException;
ArangoException::disableLogging();
// use the following line when using Composer
// e __DIR__ . '/autoload.php';
// set up some aliases for less typing later
use ArangoDBClient\Collection as ArangoCollection;
use ArangoDBClient\CollectionHandler as ArangoCollectionHandler;
use ArangoDBClient\Connection as ArangoConnection;
use ArangoDBClient\ConnectionOptions as ArangoConnectionOptions;
use ArangoDBClient\DocumentHandler as ArangoDocumentHandler;
use ArangoDBClient\Document as ArangoDocument;
use ArangoDBClient\Exception as ArangoException;
use ArangoDBClient\ConnectException as ArangoConnectException;
use ArangoDBClient\ClientException as ArangoClientException;
use ArangoDBClient\ServerException as ArangoServerException;
use ArangoDBClient\Statement as ArangoStatement;
use ArangoDBClient\UpdatePolicy as ArangoUpdatePolicy;
// set up some basic connection options
$connectionOptions = [
// database name
ArangoConnectionOptions::OPTION_DATABASE => '_system',
// server endpoint to connect to
ArangoConnectionOptions::OPTION_ENDPOINT => 'tcp://127.0.0.1:8529',
// authorization type to use (currently supported: 'Basic')
ArangoConnectionOptions::OPTION_AUTH_TYPE => 'Basic',
// user for basic authorization
ArangoConnectionOptions::OPTION_AUTH_USER => 'root',
// password for basic authorization
ArangoConnectionOptions::OPTION_AUTH_PASSWD => '',
// connection persistence on server. can use either 'Close' (one-time connections) or 'Keep-Alive' (re-used connections)
ArangoConnectionOptions::OPTION_CONNECTION => 'Keep-Alive',
// connect timeout in seconds
ArangoConnectionOptions::OPTION_TIMEOUT => 3,
// whether or not to reconnect when a keep-alive connection has timed out on server
ArangoConnectionOptions::OPTION_RECONNECT => true,
// optionally create new collections when inserting documents
ArangoConnectionOptions::OPTION_CREATE => true,
// optionally create new collections when inserting documents
ArangoConnectionOptions::OPTION_UPDATE_POLICY => ArangoUpdatePolicy::LAST,
];
// turn on exception logging (logs to whatever PHP is configured)
ArangoException::enableLogging();
try {
$connection = new ArangoConnection($connectionOptions);
$collectionHandler = new ArangoCollectionHandler($connection);
// clean up first
if ($collectionHandler->has('users')) {
$collectionHandler->drop('users');
}
if ($collectionHandler->has('example')) {
$collectionHandler->drop('example');
}
// create a new collection
$userCollection = new ArangoCollection();
$userCollection->setName('users');
$id = $collectionHandler->create($userCollection);
// print the collection id created by the server
var_dump($id);
// check if the collection exists
$result = $collectionHandler->has('users');
var_dump($result);
$handler = new ArangoDocumentHandler($connection);
// create a new document
$user = new ArangoDocument();
// use set method to set document properties
$user->set('name', 'John');
$user->set('age', 25);
$user->set('thisIsNull', null);
// use magic methods to set document properties
$user->likes = ['fishing', 'hiking', 'swimming'];
// send the document to the server
$id = $handler->save('users', $user);
// check if a document exists
$result = $handler->has('users', $id);
var_dump($result);
// print the document id created by the server
var_dump($id);
var_dump($user->getId());
// get the document back from the server
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// get a document list back from the server, using a document example
$cursor = $collectionHandler->byExample('users', ['name' => 'John']);
var_dump($cursor->getAll());
// update a document
$userFromServer->likes = ['fishing', 'swimming'];
$userFromServer->state = 'CA';
$result = $handler->update($userFromServer);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// update a document removing an attribute,
// The 'keepNull'=>false option will cause ArangoDB to
// remove all attributes in the document,
// that have null as their value - not only the ones defined here
$userFromServer->likes = ['fishing', 'swimming'];
$userFromServer->state = 'CA';
$userFromServer->age = null;
$result = $handler->update($userFromServer, ['keepNull' => false]);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// replace a document (notice that we are using the previously fetched document)
// In this example we are removing the state attribute
unset($userFromServer->state);
$result = $handler->replace($userFromServer);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// replace a document, identified by collection and document id
$user = new ArangoDocument();
$user->name = 'John';
$user->likes = ['Running', 'Rowing'];
$userFromServer->state = 'CA';
// Notice that for the example we're getting the existing
// document id via a method call. Normally we would use the known id
$result = $handler->replaceById('users', $userFromServer->getId(), $user);
var_dump($result);
$userFromServer = $handler->get('users', $id);
var_dump($userFromServer);
// remove a document on the server
$result = $handler->remove($userFromServer);
var_dump($result);
// remove a document on the server, using a collection id and document id
// In this example, we are using the id of the document we deleted in the previous example,
// so it will throw an exception here. (we are catching it though, in order to continue)
try {
$result = $handler->removeById('users', $userFromServer->getId());
} catch (\ArangoDBClient\ServerException $e) {
$e->getMessage();
}
// create a statement to insert 1000 test users
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR i IN 1..1000 INSERT { _key: CONCAT("test", i) } IN users'
]
);
// execute the statement
$cursor = $statement->execute();
// now run another query on the data, using bind parameters
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR u IN @@collection FILTER u.name == @name RETURN u',
'bindVars' => [
'@collection' => 'users',
'name' => 'John'
]
]
);
// executing the statement returns a cursor
$cursor = $statement->execute();
// easiest way to get all results returned by the cursor
var_dump($cursor->getAll());
// to get statistics for the query, use Cursor::getExtra();
var_dump($cursor->getExtra());
$exampleCollection = new ArangoCollection();
$exampleCollection->setName('example');
$id = $collectionHandler->create($exampleCollection);
// create a statement to insert 100 example documents
$statement = new ArangoStatement(
$connection, [
'query' => 'FOR i IN 1..100 INSERT { _key: CONCAT("example", i), value: i } IN example'
]
);
$statement->execute();
// later on, we can assemble a list of document keys
$keys = [];
for ($i = 1; $i <= 100; ++$i) {
$keys[] = 'example' . $i;
}
// and fetch all the documents at once
$documents = $collectionHandler->lookupByKeys('example', $keys);
var_dump($documents);
// we can also bulk-remove them:
$result = $collectionHandler->removeByKeys('example', $keys);
var_dump($result);
// drop a collection on the server, using its name,
$result = $collectionHandler->drop('users');
var_dump($result);
// drop the other one we created, too
$collectionHandler->drop('example');
} catch (ArangoConnectException $e) {
print 'Connection error: ' . $e->getMessage() . PHP_EOL;
} catch (ArangoClientException $e) {
print 'Client error: ' . $e->getMessage() . PHP_EOL;
} catch (ArangoServerException $e) {
print 'Server error: ' . $e->getServerCode() . ': ' . $e->getServerMessage() . ' - ' . $e->getMessage() . PHP_EOL;
}