There is no license information available for the latest version (1.4.0) of this package.
1.4.0
2022-07-12 12:01 UTC
Requires
- ext-ctype: *
- leven-framework/dba-common: ^1.1
README
Features
- ๐พ easily map pure PHP objects to a database
- โ intuitive relationship mapping
- ๐ง configure entities with PHP8 attributes
- ๐งช easily testable with a mock database - uses Leven Database Adapter
- ๐ค automatic table and column name mapping
- ๐ automatic eager loading and caching
- ๐ support for auto-incrementing primary props
- ๐ all props are stored JSON-encoded in a single column
Example
require 'vendor/autoload.php'; $repo = new \Leven\ORM\Repository( new \Leven\DBA\MySQL\MySQLAdapter( database: 'example', user: 'username', password: 'password', ) ); (new \Leven\ORM\RepositoryConfigurator($repo)) ->scanEntityClasses(); class Author extends \Leven\ORM\Entity { #[\Leven\ORM\Attribute\PropConfig(primary: true)] public int $id; public function __construct( public string $name; ){} } class Book extends \Leven\ORM\Entity { #[\Leven\ORM\Attribute\PropConfig(primary: true)] public int $id; public function __construct( // this defines that each Book must belong to an Author public Author $author; // we can provide rules for the Book's title #[\Leven\ORM\Attribute\ValidationConfig(notEmpty: true, maxLength: 256)] public string $title; // store this prop in a separate column, so we can search for entities by it #[\Leven\ORM\Attribute\PropConfig(index: true)] public string $isbn; // when storing or reading to the db, we'll use a converter to convert this prop to/from a scalar value #[\Leven\ORM\Attribute\PropConfig(converter: \Leven\ORM\Converter\DateTimeStringConverter::class)] public DateTime $releaseDate; ){} } $john = new Author('John Doe'); $example = new Book($author, 'Example Book', '123456789', new DateTime('2021-01-01')); $repo->store($john, $example); // later... $author = $repo->get(Author::class, 1); // get author with id 1 $books = $repo->findChildrenOf($author, Book::class)->get(); $book = $repo->find(Book::class)->where('isbn', '123456789')->getFirst(); $book->title = 'New Title'; $repo->update($book);