matthiasnoback / doctrine-orm-value-object
将值对象引入Doctrine ORM
dev-master
2013-12-28 14:18 UTC
Requires
- doctrine/annotations: 1.*
- doctrine/orm: ~2.2
- jms/metadata: 1.*
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-29 03:48:42 UTC
README
警告:此库尚未准备好用于生产
此库提供用于处理值对象和Doctrine实体的工具。
这是您可以使用ValueObject
注解将PhoneNumber
值对象持久化为Person
实体字段的示例
<?php namespace Acme\DemoBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Acme\DemoBundle\Value\PhoneNumber; use Noback\DoctrineOrmValueObject\Annotation\ValueObject; /** * @ORM\Entity */ class Person { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ValueObject(class="Acme\DemoBundle\Value\PhoneNumber") */ private $phoneNumber; private $phoneNumber_number; private $phoneNumber_since; public function getId() { return $this->id; } public function setPhoneNumber(PhoneNumber $phoneNumber) { $this->phoneNumber = $phoneNumber; } public function getPhoneNumber() { return $this->phoneNumber; } }
Person
实体应具有与PhoneNumber
类属性对应的相应属性。
<?php namespace Acme\DemoBundle\Value; use Doctrine\ORM\Mapping\Column; class PhoneNumber { /** * @Column(type="string", length=255) */ private $number; /** * @Column(type="datetime") */ private $since; public function __construct($number, \DateTime $since) { $this->number = $number; $this->since = $since; } public function getNumber() { return $this->number; } public function getSince() { return $this->since; } }
PhoneNumber
类包含对应于Person
实体字段的列定义。
事件监听器确保
- 当持久化或更新
Person
实体时,实体的字段将包含来自PhoneNumber
值对象的价值。 - 当从数据库加载
Person
实体时,phoneNumber
字段将包含一个PhoneNumber
对象。其值将复制自指定的实体字段。 - 当创建或更新数据库模式时,存储
PhoneNumber
值对象所需的字段将添加到Person
实体模式中。
当前限制
- 仅支持Doctrine列注解