theking2 / kingsoft-persist-db

implementation of ipersist for database

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DB implementation of Persist

This implementation of the abstract Persist/Base uses a Db connection to make tables in the database available as persistent PHP objects. This generates a class for every table or view in the database extracting PK, possibly with auto increment from tables. With Mariadb it is not possible to extract PK from a view so manual setting the getPrimaryKey() is needed.

Setup

To create the PHP proxies to the tables and views use

https://example.com/vendor/kingsoft/persist-db/discover.php

which only works if the proper global SETTINGS array is available. (See Kingsoft\Utils. Specifically it requires the proper DB settings and a namespace= setting under [api] to generate the classses in the required PHP namespace. The location can later be added to the composer.json file for autoload. If a PK is not auto increment, a string is generated with bin2hex(random_bytes(12)) with the tablename- as prefix. The atrribute should be larger than CHAR(str_len(tablename) + 1 + 24).

This will create a folder discovered in the root with subfolders based on namespace in the settings file. It also responds with a page listing what is available. To have the proxies autoloaded add the psr-4 section to your composer.jsonand run

composer dump-autoload

The allowedEndPoints array can be used for a persist-rest settings section.

The proxy objects work as a facade for database tables and can now used to (CRUD)

  • Created a record, set the attributes and call Persist::freeze() to store it in the database
  • Read by constructor( ) using the record's id as the single parameter
  • Update by reading, changing the properties and IPersist::freeze()
  • Delete by thawing and IPersist::deleteing the php object

We have turened a normal PHP object in a CRUD object in this way. Yaj!

Searching

Searching is also possible be setting a where and order with a static findall which gets a Generator interface to use with foreach. A findFirst, fineNext, can be used in an Iterator context using the Persist\IteratorTrait. The object itself is a generater and can be used in a yield loop.

Services

  • Persist\Base::createFromArray() creates a record from an array representation
  • Persist\Base::getJson() creates a json representation of the object
  • Persist\Base::createFromJson() does the reverse

About

implementation of ipersist for database

License:MIT License


Languages

Language:PHP 100.0%