Download the PHP package byjoby/destructr without Composer
On this page you can find all versions of the php package byjoby/destructr. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download byjoby/destructr
More information about byjoby/destructr
Files in byjoby/destructr
Package destructr
Short Description A library for storing a mix of structured and unstructured data in relational databases
License MIT
Informations about the package destructr
Destructr
Destructr is a specialized ORM that allows a seamless mix of structured, relational data with unstructured JSON data.
Getting started
The purpose of Destructr is to allow many "types" of objects to be stored in a single table.
Every Destructr Data Object (DSO) simply contains an array of data that will be saved into the database as JSON.
Array access is also flattened, using dots as delimiters, so rather than reading $dso["foo"]["bar"]
you access that data via $dso["foo.bar"]
.
This is for two reasons.
It sidesteps the issue of updating nested array values by reference, and it creates an unambiguous way of locating a node of the unstructured data with a string, which mirrors how we can write SQL queries to reference them.
If this sounds like an insanely slow idea, that's because it is. Luckily MySQL and MariaDB have mechanisms we can take advantage of to make generated columns from any part of the unstructured data, so that pieces of it can be pulled out into their own virtual columns for indexing and faster searching/sorting.
Database driver and factory
In order to read/write objects from a database table, you'll need to configure a Driver and Factory class.
Creating a new record
Next, you can use the factory to create a new record object.
Searching
Factories provide an interface for creating Search
objects, which allow you to enter in various SQL clauses in a structured and abstract fashion.
Requirements
This system relies heavily on the JSON features of the underlying database. This means it cannot possibly run without a database that supports JSON features. Basically if a database doesn't have JSON functions it's probably impossible for Destructr to ever work with it.
At the moment there is pretty decent support for:
- MySQL >=5.7.8
- MariaDB >=10.2.7
- SQLite 3 (with some caveats)
In practice this means Destructr will never be able to run on less than the following versions of the following popular databases:
- MySQL >=5.7.8
- MariaDB >=10.2.7
- PostgreSQL >=9.3
- SQL Server >=2016
Theoretically Destructr is also an excellent fit for NoSQL databases. If I ever find myself needing it there's a good chance it's possible to write drivers for running it on something like MongoDB as well. It might even be kind of easy.
SQLite caveats
MySQL and MariaDB drivers set virtual columns to be generated automatically using their native JSON functions. SQLite doesn't have native JSON (in most environments, at least), so Destructr itself manually updates virtual columns whenever objects are inserted or updated. In practice this won't matter if you are doing all your insertion and updating via Destructr. If you're doing updates to your database via any other method, however, you need to be aware of this, and manually update the virtual column values.