{"id":18087877,"url":"https://github.com/aurimasniekis/doctrine-json-object-type","last_synced_at":"2025-07-23T01:32:13.694Z","repository":{"id":62489588,"uuid":"91444490","full_name":"aurimasniekis/doctrine-json-object-type","owner":"aurimasniekis","description":"Doctrine Json Object Type","archived":false,"fork":false,"pushed_at":"2017-05-16T10:34:18.000Z","size":9,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-16T02:08:14.907Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aurimasniekis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-16T10:10:48.000Z","updated_at":"2022-03-29T18:34:04.000Z","dependencies_parsed_at":"2022-11-02T11:15:26.902Z","dependency_job_id":null,"html_url":"https://github.com/aurimasniekis/doctrine-json-object-type","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/aurimasniekis/doctrine-json-object-type","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurimasniekis%2Fdoctrine-json-object-type","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurimasniekis%2Fdoctrine-json-object-type/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurimasniekis%2Fdoctrine-json-object-type/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurimasniekis%2Fdoctrine-json-object-type/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aurimasniekis","download_url":"https://codeload.github.com/aurimasniekis/doctrine-json-object-type/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurimasniekis%2Fdoctrine-json-object-type/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266602741,"owners_count":23954694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-31T17:09:16.001Z","updated_at":"2025-07-23T01:32:13.666Z","avatar_url":"https://github.com/aurimasniekis.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Doctrine Json Object Type\n\n[![Latest Version](https://img.shields.io/github/release/aurimasniekis/doctrine-json-object-type.svg?style=flat-square)](https://github.com/aurimasniekis/doctrine-json-object-type/releases)\n[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE)\n[![Build Status](https://img.shields.io/travis/aurimasniekis/doctrine-json-object-type.svg?style=flat-square)](https://travis-ci.org/aurimasniekis/doctrine-json-object-type)\n[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/aurimasniekis/doctrine-json-object-type.svg?style=flat-square)](https://scrutinizer-ci.com/g/aurimasniekis/doctrine-json-object-type)\n[![Quality Score](https://img.shields.io/scrutinizer/g/aurimasniekis/doctrine-json-object-type.svg?style=flat-square)](https://scrutinizer-ci.com/g/aurimasniekis/doctrine-json-object-type)\n[![Total Downloads](https://img.shields.io/packagist/dt/aurimasniekis/doctrine-json-object-type.svg?style=flat-square)](https://packagist.org/packages/aurimasniekis/doctrine-json-object-type)\n\n[![Email](https://img.shields.io/badge/email-aurimas@niekis.lt-blue.svg?style=flat-square)](mailto:aurimas@niekis.lt)\n\nDoctrine Json Object Type provides a ability to serialize/deserialize object which implements JsonObject interface to json and backwards.\n\n\n## Install\n\nVia Composer\n\n```bash\n$ composer require aurimasniekis/doctrine-json-object-type\n```\n\n## Configuration\n\nSymfony:\n```yaml\ndoctrine:\n    dbal:\n        url: '%env(DATABASE_URL)%'\n        types:\n          json_object: AurimasNiekis\\DoctrineJsonObjectType\\JsonObjectType\n```\n\nPlain Doctrine:\n```php\n\u003c?php\n\nuse Doctrine\\DBAL\\Types\\Type;\n\nType::addType('json_object', 'AurimasNiekis\\DoctrineJsonObjectType\\JsonObjectType');\n```\n\n## Usage\n\nValue object should implement `JsonObject` interface.\n\n```php\n\u003c?php\n\nuse AurimasNiekis\\DoctrineJsonObjectType\\JsonObject;\n\nclass ValueObject implements JsonObject\n{\n    private $name;\n    \n    public function setName($name)\n    {\n        $this-\u003ename = $name;\n    }\n    \n    public function getName()\n    {\n        return $this-\u003ename;\n    }\n    \n    public static function fromJson(array $data)\n    {\n        $inst = new self();\n        \n        $inst-\u003esetName($data['name']);\n        \n        return $inst;\n    }\n    \n    public function jsonSerialize()\n    {\n        return [\n            'name' =\u003e $this-\u003egetName()\n        ];\n    }\n}\n```\n\nEntity\n\n```php\n\u003c?php\n\nuse Doctrine\\ORM\\Mapping as ORM;\n\n/**\n * @ORM\\Entity\n * @ORM\\Table(name=\"entity\")\n */\nclass Entity\n{\n    /**\n     * @var int\n     *\n     * @ORM\\Column(type=\"integer\")\n     * @ORM\\Id\n     * @ORM\\GeneratedValue(strategy=\"AUTO\")\n     */\n    private $id;\n\n    /**\n     * \"json_object\" is extended \"json\" type \n     * \n     * @var ValueObject\n     *\n     * @ORM\\Column(type=\"json_object)\n     */\n    private $value;\n\n    /**\n     * @return int\n     */\n    public function getId(): int\n    {\n        return $this-\u003eid;\n    }\n\n    /**\n     * @return ValueObject\n     */\n    public function getValue()\n    {\n        return $this-\u003evalue;\n    }\n\n    /**\n     * @param ValueObject $value\n     */\n    public function setValue(ValueObject $value)\n    {\n        $this-\u003evalue = $value;\n    }\n}\n```\n\nUsage\n\n```php\n\u003c?php\n\n$value = new ValueObject();\n$value-\u003esetName('foo_bar');\n\n$entity = new Entity();\n$entity-\u003esetValue($value);\n\n$em-\u003epersist($entity);\n$em-\u003eflush(); // INSERT INTO `entity` (`id`, `value`) VALUES (1, '{\"name\": \"foo_bar\", \"__class\": \"ValueObject\"}');\n\n\n$findResult = $repo-\u003efind(1);\n\n/// $findResult-\u003egetValue() === $value;\n```\n\n\n## Testing\n\n```bash\n$ composer test\n```\n\n\n## Contributing\n\nPlease see [CONTRIBUTING](CONTRIBUTING.md) and [CONDUCT](CONDUCT.md) for details.\n\n\n## License\n\nPlease see [License File](LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurimasniekis%2Fdoctrine-json-object-type","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faurimasniekis%2Fdoctrine-json-object-type","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurimasniekis%2Fdoctrine-json-object-type/lists"}