rasa-web / propel-postgres-json-behavior
Storage of complex data using Postgres JSON.
dev-master
2017-04-09 08:51 UTC
Requires
- propel/propel1: ~1
Requires (Dev)
- phpunit/phpunit: ~3.7
This package is not auto-updated.
Last update: 2024-11-09 15:18:38 UTC
README
PostgresSql JSON behavior for propel, This behavior only support postgres 9.3 and (maybe) upper version.
Add behavior into your build.properties :
propel.behavior.postgres_json.class = path.to.vendor.rasa-web.propel-postgres-json-behavior.src.PostgresJsonBehavior
Create your schema:
<database name="json_behavior" defaultIdMethod="native"> <table name="foo"> <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" /> <column name="name" type="VARCHAR" required="true" /> <column name="json1" type="VARCHAR" required="true"/> <column name="json2" type="VARCHAR" required="true"/> <behavior name="postgres_json"> <parameter name="column_names" value="json1,json2" /> <!-- throw exception on get{json}Path functions if the path is not available, default is false and the result is calculated base on the $default parameter of function --> <parameter name="exception_on_not_found" value="false" /> </behavior> </table> </database>
Build your model, the type automatically changed to JSON in result sql.
//Base class $object->getJson1(); // Get the json1 field in array format (not string) // If the exception_on_not_found is true then there is an exception if key is not available $object->getJson1Path("key1.subkey.subkey.lastkey", $default);// get the 'value' {"key":{"subkey":{"subkey":{"lastkey": "value"}}}} $object->setJson1Path("path.to.key", $value) // Query class $objectQuery->filterByJson1Path("a.b.c", "value"); // search for {"a":{"b":{"c":"value"}}}