aurimasniekis / doctrine-json-object-type
Doctrine Json Object Type
1.0.0
2017-05-16 10:29 UTC
Requires
- php: ^7.0
- doctrine/dbal: 2.6.x-dev
Requires (Dev)
- phpunit/phpunit: ~6.1
This package is auto-updated.
Last update: 2024-12-14 03:27:10 UTC
README
Doctrine Json Object Type provides a ability to serialize/deserialize object which implements JsonObject interface to json and backwards.
Install
Via Composer
$ composer require aurimasniekis/doctrine-json-object-type
Configuration
Symfony:
doctrine: dbal: url: '%env(DATABASE_URL)%' types: json_object: AurimasNiekis\DoctrineJsonObjectType\JsonObjectType
Plain Doctrine:
<?php use Doctrine\DBAL\Types\Type; Type::addType('json_object', 'AurimasNiekis\DoctrineJsonObjectType\JsonObjectType');
Usage
Value object should implement JsonObject
interface.
<?php use AurimasNiekis\DoctrineJsonObjectType\JsonObject; class ValueObject implements JsonObject { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } public static function fromJson(array $data) { $inst = new self(); $inst->setName($data['name']); return $inst; } public function jsonSerialize() { return [ 'name' => $this->getName() ]; } }
Entity
<?php use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="entity") */ class Entity { /** * @var int * * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * "json_object" is extended "json" type * * @var ValueObject * * @ORM\Column(type="json_object) */ private $value; /** * @return int */ public function getId(): int { return $this->id; } /** * @return ValueObject */ public function getValue() { return $this->value; } /** * @param ValueObject $value */ public function setValue(ValueObject $value) { $this->value = $value; } }
Usage
<?php $value = new ValueObject(); $value->setName('foo_bar'); $entity = new Entity(); $entity->setValue($value); $em->persist($entity); $em->flush(); // INSERT INTO `entity` (`id`, `value`) VALUES (1, '{"name": "foo_bar", "__class": "ValueObject"}'); $findResult = $repo->find(1); /// $findResult->getValue() === $value;
Testing
$ composer test
Contributing
Please see CONTRIBUTING and CONDUCT for details.
License
Please see License File for more information.