cycle / annotated
Cycle ORM 注释实体生成器
v4.2.0
2024-09-03 15:04 UTC
Requires
- php: >=8.1
- cycle/orm: ^2.7
- cycle/schema-builder: ^2.8
- doctrine/inflector: ^2.0
- spiral/attributes: ^2.8|^3.0
- spiral/tokenizer: ^2.8|^3.0
Requires (Dev)
- doctrine/annotations: ^1.14.3 || ^2.0.1
- phpunit/phpunit: ^10.1
- vimeo/psalm: ^5.11
This package is auto-updated.
Last update: 2024-09-03 15:05:17 UTC
README
该包提供使用PHP属性定义Cycle ORM模式的能力。
使用方法
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Column; #[Entity] class User { #[Column(type: 'primary')] private int $id; #[Column(type: 'string(32)')] private string $login; #[Column(type: 'enum(active,disabled)')] private string $status; #[Column(type: 'decimal(5,5)')] private $balance; }
关系
HasOne
use Cycle\Annotated\Annotation\Relation\HasOne; use Cycle\Annotated\Annotation\Entity; #[Entity] class User { // ... #[HasOne(target: Address::class)] public ?Address $address; }
注意 了解更多关于 HasOne。
HasMany
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\HasMany; #[Entity] class User { // ... #[HasMany(target: Post::class)] private array $posts; }
注意 了解更多关于 HasMany。
BelongsTo
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\BelongsTo; #[Entity] class Post { // ... #[BelongsTo(target: User::class)] private User $user; }
注意 了解更多关于 BelongsTo。
RefersTo
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\RefersTo; use Cycle\Annotated\Annotation\Relation\HasMany; #[Entity] class User { // ... #[RefersTo(target: Comment::class)] private ?Comment $lastComment; #[HasMany(target: Comment::class)] public array $comments; // ... public function addComment(Comment $c): void { $this->lastComment = $c; $this->comments[] = $c; } public function removeLastComment(): void { $this->lastComment = null; } public function getLastComment(): ?Comment { return $this->lastComment; } }
注意 了解更多关于 RefersTo。
ManyToMany
use Cycle\Annotated\Annotation\Relation\ManyToMany; use Cycle\Annotated\Annotation\Entity; #[Entity] class User { // ... #[ManyToMany(target: Tag::class, through: UserTag::class)] protected array $tags; public function getTags(): array { return $this->tags; } public function addTag(Tag $tag): void { $this->tags[] = $tag; } public function removeTag(Tag $tag): void { $this->tags = array_filter($this->tags, static fn(Tag $t) => $t !== $tag); } }
注意 了解更多关于 ManyToMany。
内嵌实体
use Cycle\Annotated\Annotation\Embeddable; use Cycle\Annotated\Annotation\Column; use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\Embedded; #[Embeddable] class UserCredentials { #[Column(type: 'string(255)')] public string $username; #[Column(type: 'string')] public string $password; } #[Entity] class User { #[Column(type: 'primary')] public int $id; #[Embedded(target: 'UserCredentials')] public UserCredentials $credentials; public function __construct() { $this->credentials = new UserCredentials(); } }
注意 了解更多关于 内嵌实体。
BelongsToMorphed
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\Morphed\BelongsToMorphed; #[Entity] class Image { // ... #[BelongsToMorphed(taget: ImageHolderInterface::class)] public ImageHolderInterface $imageHolder; }
注意 了解更多关于 BelongsToMorphed。
MorphedHasOne
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\Morphed\MorphedHasOne; #[Entity] class User { // ... #[MorphedHasOne(target: Image::class)] public $image; }
注意 了解更多关于 MorphedHasOne。
MorphedHasMany
use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\Morphed\MorphedHasMany; #[Entity] class User { // ... #[MorphedHasMany(target: Image::class)] public $images; }
注意 了解更多关于 MorphedHasMany。
单表继承
#[Entity] #[DiscriminatorColumn(name: 'type')] // Discriminator column (required) class Person { #[Column(type: 'primary', primary: true)] protected int $id; #[Column(type: 'string')] protected string $name; } #[Entity] #[InheritanceSingleTable] class Employee extends Person { #[Column(type: 'int')] protected int $salary; } #[Entity] #[InheritanceSingleTable(value: 'foo_customer')] class Customer extends Person { #[Column(type: 'json')] protected array $preferences; }
注意 了解更多关于 单表继承。
联合表继承
#[Entity] class Person { #[Column(primary: true)] protected int $id; #[Column()] protected int $fooId; #[Column(type: 'string')] protected string $name; } #[Entity] #[InheritanceJoinedTable(outerKey: 'fooId')] class Employee extends Person { #[Column(type: 'int')] protected int $salary; } #[Entity] #[InheritanceJoinedTable(outerKey: 'id')] class Customer extends Person { #[Column(type: 'json')] protected array $preferences; }
注意 了解更多关于 联合表继承。
许可
MIT许可(MIT)。请参阅LICENSE
以获取更多信息。由Spiral Scout维护。