OrangeDB is a library about high performance transition of master data from yaml/json to objects.
You can easily install this package over composer
composer require 'davidbadura/orangedb'
<?php
use DavidBadura\OrangeDb\Annotation as OD;
/**
* @OD\Document("character")
*/
class Character {
/**
* @OD\Type("string")
*/
private $name;
/**
* @OD\Type("integer")
*/
private $age;
/**
* @OD\ReferenceMany("Character")
*/
private $children;
public function getName(): string
{
return $this->name;
}
public function getAge(): int
{
return $this->age;
}
public function getChildren(): array
{
return $this->children;
}
}
# /var/cache/orangedb/character/sarah.yaml
name: Sarah Connor
age: 32
children: ['john']
# /var/cache/orangedb/character/john.yaml
name: John Connor
age: 8
children: []
<?php
use DavidBadura\OrangeDb\DocumentManager;
use DavidBadura\OrangeDb\Adapter\YamlAdapter;
$manager = new DocumentManager(new YamlAdapter(__DIR__.'/data'), __DIR__.'/var/cache/orangedb');
$character = $manager->find(Character::class, 'sarah');
echo $character->getName(); // Sarah Connor
echo $character->getAge(); // 32
echo count($character->getChildren()); // 1
echo $character->getChildren()[0]->getName(); //John Connor