matthiasnoback/doctrine-orm-value-object

将值对象引入Doctrine ORM

dev-master 2013-12-28 14:18 UTC

This package is auto-updated.

Last update: 2024-08-29 03:48:42 UTC


README

Build Status

警告:此库尚未准备好用于生产

此库提供用于处理值对象和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列注解