cycle / orm-promise-mapper
Installs: 1 070
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 3
Open Issues: 0
Requires
- php: >=8.0
- cycle/orm: ^2.0
- doctrine/instantiator: ^1.3.1 || ^2.0
- laminas/laminas-hydrator: ^4.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- spiral/tokenizer: ^2.8
- vimeo/psalm: ^4.13
README
Cycle ORM provides the ability to carry data over the specific class instances by using cycle/orm-promise-mapper
package with \Cycle\ORM\Reference\Promise
objects for relations with lazy loading.
Installation
The preferred way to install this package is through Composer:
composer require cycle/orm-promise-mapper
Define the Entity
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Column; use Cycle\Annotated\Annotation\Relation\BelongsTo; use Cycle\Annotated\Annotation\Relation\HasMany; use Cycle\ORM\Reference\ReferenceInterface; #[Entity] class User { #[Column(type: 'primary')] public int $id; #[HasMany(target: Post::class, load: 'eager')] public array $posts; #[HasMany(target: Tag::class, load: 'lazy')] public ReferenceInterface|array $tags; } #[Entity] class Post { // ... #[BelongsTo(target: User::class, load: 'lazy')] public ReferenceInterface|User $user; #[BelongsTo(target: Tag::class, load: 'eager')] public Tag $tag; }
Fetching entity data
$user = $orm->getRepository('user')->findByPK(1); // $user->posts contains an array because of eager loading foreach ($user->posts as $post) { // ... } // $user->tags contains Cycle\ORM\Reference\Promise object because of lazy loading $tags = $user->tags->fetch(); foreach ($tags as $post) { // ... } $post = $orm->getRepository('post')->findByPK(1); // $post->user contains Cycle\ORM\Reference\Promise object because of lazy loading $userId = $post->user->fetch()->id; // $post->tag contains Tag object because of eager loading $tagName = $post->tag->name;
License:
The MIT License (MIT). Please see LICENSE
for more information.
Maintained by Spiral Scout.