1. Go to this page and download the library: Download wtsvk/evitadb-php-client 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/ */
wtsvk / evitadb-php-client example snippets
use Wtsvk\EvitaDbClient\EvitaDbClient;
use Wtsvk\EvitaDbClient\QueryBuilder;
use Wtsvk\EvitaDbClient\Transaction\ReadTransactionContext;
// Catalog-scoped client — all operations target this catalog
$client = EvitaDbClient::create(host: 'localhost', port: 5555, catalog: 'myCatalog');
$response = $client->readTransaction(function (ReadTransactionContext $tx) {
$query = (new QueryBuilder('Product'))
->withLocale('sk')
->filterByAttribute('code', 'PROD-001')
->page(1, 20)
->build();
return $tx->query($query);
});
use Wtsvk\EvitaDbClient\EvitaDbConnection;
use Wtsvk\EvitaDbClient\Transaction\ReadTransactionContext;
$conn = EvitaDbConnection::create(host: 'localhost', port: 5555);
if (! $conn->isHealthy()) {
throw new RuntimeException('EvitaDB unreachable');
}
// Server-level operations
$conn->defineCatalog('myCatalog'); // creates the catalog AND transitions it to ALIVE
$catalogs = $conn->getCatalogNames();
// Create catalog-scoped clients
$client = $conn->catalog('myCatalog');
$entity = $client->readTransaction(
fn (ReadTransactionContext $tx) => $tx->getEntity(entityType: 'Product', primaryKey: 42),
);
use Wtsvk\EvitaDbClient\EvitaDbConnection;
use Wtsvk\EvitaDbClient\EvitaDbConnectionInterface;
use Wtsvk\EvitaDbClient\EvitaDbClientInterface;
$this->app->singleton(EvitaDbConnectionInterface::class, fn () => EvitaDbConnection::create(
host: config('evitadb.host'),
port: (int) config('evitadb.port'),
));
$this->app->singleton(EvitaDbClientInterface::class, fn ($app) =>
$app->make(EvitaDbConnectionInterface::class)->catalog(config('evitadb.catalog')),
);
use Wtsvk\EvitaDbClient\Transaction\WriteTransactionContext;
use Wtsvk\EvitaDbClient\Transaction\ReadTransactionContext;
// Write batch — many mutations, one session
$client->writeTransaction(function (WriteTransactionContext $tx) use ($products) {
foreach ($products as $product) {
$tx->upsertEntity($product->toMutation());
}
});
// Consistent read snapshot
$bundle = $client->readTransaction(function (ReadTransactionContext $tx) {
return [
'product' => $tx->getEntity('Product', 42),
'category' => $tx->findEntity('Category', 7),
];
});
// Mixed: read existing entity then update it
$pk = $client->writeTransaction(function (WriteTransactionContext $tx) use ($newProductMutation) {
if ($tx->findEntity('Product', 42) !== null) {
$tx->deleteEntity('Product', 42);
}
return $tx->upsertEntity($newProductMutation);
});
$client->writeTransaction(
fn: function (WriteTransactionContext $tx) {
// experiment freely — nothing will persist
$tx->upsertEntity($mutation);
},
dryRun: true,
);
use Wtsvk\EvitaDbClient\SessionCommitBehavior;
// Fast bulk import — don't wait for indexes
$client = EvitaDbClient::create(
host: 'localhost',
port: 5555,
catalog: 'myCatalog',
defaultCommitBehavior: SessionCommitBehavior::WaitForConflictResolution,
);
// Override per call when needed
$client->writeTransaction(
fn: fn (WriteTransactionContext $tx) => $tx->upsertEntity($mutation),
commitBehavior: SessionCommitBehavior::WaitForChangesVisible,
);
use Wtsvk\EvitaDbClient\EntityFetch;
// Fetch only specific attributes and prices
$entity = $client->readTransaction(
fn (ReadTransactionContext $tx) => $tx->getEntity(
entityType: 'Product',
primaryKey: 42,
tingFilter())
->filterByAttribute('code', 'PROD-001')
->build();
use Wtsvk\EvitaDbClient\Testing\EvitaDbMockClient;
public function testProductServiceReturnsPrice(): void
{
// Consumer code calls $client->readTransaction(...) internally — the mock
// routes the read through MockReadOnlySessionScopedContext, which looks up
// the stubbed entity below.
$client = (new EvitaDbMockClient('myCatalog'))
->withEntity(entityType: 'Product', primaryKey: 42, entity: $sealedEntity);
$service = new ProductService($client);
$this->assertSame(100, $service->getProductPrice(42));
}
public function testProductServiceUpsertsRecordsCall(): void
{
$client = new EvitaDbMockClient('myCatalog');
$service = new ProductService($client);
$service->createProduct(name: 'iPhone', price: 999);
// Consumer code calls $client->writeTransaction(fn ($tx) => $tx->upsertEntity(...))
// — the mock records the mutation as a spy entry below.
$this->assertCount(1, $client->upsertCalls);
}
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.