webd / noorm
No ORM storage of PHP object
Requires
- zeptech/annotations: 1.1.0
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2024-11-19 22:40:14 UTC
README
No-ORM storage of PHP object.
PHP-Noorm makes it easy to persist your PHP object, without the overhead of Object-Relation Mapping (ORM).
Installation
Install the latest version using composer:
$ composer require webd/noorm
Quickstart
First, load composer, and define a directory where your objects can be saved (it has to be writable).
require_once __DIR__ . "/../vendor/autoload.php"; use noorm\Persistent; // Indicate where to save data Persistent::SetDirectory("/tmp/noorm-example");
Define the classes that you want to persist. They have to extend the class \noorm\Persitent.
class Client extends Persistent { public $name = ""; private $val; /** * Use annotations to indicate $items is a many-to-many relation to class Item * @target Item * @var \noorm\ManyToManyRelation */ public $items; public function SetName($name) { $this->name = $name; return $this; } public function GetVal() { return $this->val; } public function SetVal($val) { $this->val = $val; return $this; } } class Item extends Persistent { public $name = ""; /** * Use annotations to indicate $clients is a many-to-many relation to Client * @target Client * @var \noorm\ManyToManyRelation */ public $clients; }
You can now create objects and save them on disk.
// Create a new object and save it to disk $client = new Client(); $client->name = "C1"; $client->Save();
The static method All() returns a \noorm\Dataset representing all the saved objects of this class. You can use this dataset to filter, sort or list your objects.
// Show all clients /* @var $client Client */ foreach (Client::All()->Collect() as $client) { echo $client->name . " : "; echo $client->items->Get()->Count() . " items\n"; }
PHP-Noorm also manages many-to-many relations for you. These are described using annotations in your class definition.
// Create a new item $item = new Item(); $item->name = "I"; $item->Save(); // Add this item to the first client $client = Client::All()->First(); $client->items->Add($item);
Known bugs and limitations
These are planned improvements:
- There can be only one many-to-many relation between two classes;
- You cannot define a many-to-many relation between a class and itself;
- All() will eagerly load all objects, which is memory expensive.