PHP code example of aurimasniekis / doctrine-json-object-type

1. Go to this page and download the library: Download aurimasniekis/doctrine-json-object-type library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

aurimasniekis / doctrine-json-object-type example snippets




use Doctrine\DBAL\Types\Type;

Type::addType('json_object', 'AurimasNiekis\DoctrineJsonObjectType\JsonObjectType');



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()
        ];
    }
}



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;
    }
}



$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;