Comparar tamaños
Registrarse
English Français

Agile Data

4
Data Access Framework for high-latency databases (Cloud SQL/NoSQL).
PHP Data Access Libraries (ORM, ActiveRecord, Persistence)
Name
Agile Data
Sitio webgit.io/ad
Github / Bitbucket / Sourceforgegit.io/ad
LicenseMIT
Latest version1.2.x
How schema is defined?in PHP. Method init() in Model class defines fields, relations, conditions, etc.
Code generationSí https://github.com/atk4/schema
Can be used in Any FrameworkSí Through composer/packagist
Automated CacheSí Frameworks focuses on optimizing queries rather then caching. Still possible with cross-persistence saving.
Anti-patterns (purposely included)Model close-coupled with Persistence and Field classes.
Audience
DependenciesMinimal: 2 packages: DSQL Query Builder (git.io/...
Simplicity
5.0/5 2 Calificaciones
Enterprise Compliance
5.0/5 2 Calificaciones
Minimum PHP Version5.6
Basic Features
PDO SupportSí Yes
Transparent support for NoSQL- Through 3rd party drivers.
How to invoke db-vendor-specific extensions?Sí For SQL - save/load/delete operations are expressed in DSQL Queries that can be manipulated: http://git.io/dsql
Array as a persistenceSí CRUD operations supported
RestAPI as a persistence- Through 3rd party extension.
JSON string as a persistenceSí Supported with few extra lines of code.
Same model, multiple persistencesSí Same class. Different object.
Basic Single-record operations (C,R,U,D)
Table Name MappingSí Yes
Field Name MappingSí Yes (Field::actual property)
Map Entity to SubQuerySí Yes. Extension exist for UNION-models. https://github.com/atk4/report
Map property to expressionSí $model->addExpression()
Map native types (DateTime)Sí $field->type = 'date'
User-defined types (e.g. "23 USD")Sí Yes. Independent from Model. by extending Field class.
Map field of related Entity ('currency' = currency_id->Model Currency.name)Sí Transparently maps into sub-select.
Map field to sub-query on related entity (Client.balance = Client->orders->sum(total))Sí Yes. hasMany()->addField(..aggregate)
Entity to join multiple tables (adding new record populates both tables)Sí $model->join('other_table')
Criteria, Scope, Conditions (Model will refuse to work with records that does not match criteria)
Support model-level criteriaSí Yes. Applied on loading / saving / update.
Soft-deleteSí Through criteria. Example given in the docs.
Domain Model CriteriaSí $m->addCondition('gender','M'); where 'gender' can be arbitrary expression, sub-select, field from association(join) or mapped no another physical field.
Expression-based conditionSí $m->addCondition($m->expr('..'));
Criteria Compliance (new record must match condition)Sí Transaction rollback and exception. Automated-rloading.
Dynamic criteriaSí $user->addCondition('is_expired', false)
Query Building (Convert Model into Query object for further SQL tweaking)
Convert Model into Query ObjectSí $q = $model->action('select');
Raw expressionSí new Expression('any sql')
Nested/Composite Queries/ExpressionsSí Expression can be in any part of query
Reference domain-model field in querySí through Expressionable interface
field, where, order, limitSí Expressions and Parametric values
options, rollup, partition- Through custom templates, or expressions.
UPDATE, DELETE, INSERT query buildingSí
REPLACE, TRUNCATESí
SHOW, DESCRIBE, CALL- Supported through Expressions or Custom query template
ALTER, CREATE query buildingSí Addon: http://github.com/atk4/schema
User-defined query templateSí Templates for all queries
full support for OR conditionsSí Through Object Composition and Expressions
Use Domain logic in multi-record update- Supported, but must map fields/values manually.
Data Fetching (different ways to retrieve data from database)
Get All Data (2x array)Sí
Associative Array (id=>value)No Planned
Select only required fieldsSí
Typecasting (e.g. DateTime)Sí
Import (multiple records)Sí
Respect domain model mapping (and criteria)Sí
Single rowSí loadAny
Single ValueSí Through action
Single Column- may need to map resulting array
IteratorSí
Bypass persistence mappingSí action('select')->getAll()
Loading and Saving individual records
Load by IDSí load(id)
Load by other fieldSí loadBy('field', $value)
Read-only ModelsSí Yes
Model without primary keySí Yes, but only in Read-only Mode
Specify fields to loadSí onlyFields()
Save only sends dirty fieldsSí
Guarded / Fillable propertiesSí Conditions and OnlyFields do same thing but more reliably.
Object Hierarchy Model
Admin extends User, adds criteria (is_admin=1)Sí Yes, recommended pattern. "User" class adds condition.
Admin extends User, adds accessible fieldsSí Yes, recommended pattern.
Extend model, add Join (Disjoined SubTypes)Sí Yes. Unlimited number of joins.
Extend model change tableSí Yes. Used to tweak 3rd party models.
Relations/References (One model can relate to another model. NOT A TABLE JOIN)
Model can define relation to other ModelSí References are implemented as Objects
One-to-ManySí $user->hasMany('Orders', new Order());
One-to-many traversal strategyReturns destination model instance with dynamically applied criteria (parent_id=123). No queries are executed. Inserting record into this model will ensure association with parent model.
Lazy/Eager-loadingNo Anti-pattern
One-to-OneSí $order->hasOne('user_id', new User());
Many-to-ManySí $user->addCondition('vip', true)->ref('Orders');
Deep Many-to-Many traversal.Sí $user->ref('Orders')->ref('Payments')->action('count'); No intermediate queries.
Cross-Persistence traversalSí $user->hasMany('Log', new Log($mongodb));
Cross-persistence joins, aggregation, reporting
Multi-persistence joinNo
UNION existing modelsSí Yes, in add-on https://github.com/atk4/report/. Can join UNION result with more tables.
Domain-model AggregationSí Group by multiple fields. Apply aggregation functions. Preserve types.
Model to Model joinNo Planned.
Multi-persistence UNIONNo
Behaviours / Hooks
Before/After operationSí
Override standard C,R,U,D operationsSí
Persistence-specific hooks (to modify Query)Sí
User-defined hooksSí
Auditing
Global AuditingSí http://www.agiletoolkit.org/data/extensions/audit
Store old/new field valuesSí Yes in JSON and user-readable string.
Revert action (undo) and replay (redo)Sí
Reactive actionsSí Each action will be automatically linked with sub-actions which may be invoked through Hooks.
Store log in any persistenceSí
Override, Add fields to audit logRecord dirty fields before persisting. Type-cast into JSON string and store in a single field of AuditLog Model. This model can be persisted anywhere, table, file, etc.
Custom eventsSí
Access to record-specific historySí $item->ref('AuditLog');
Date of creation, modification- No but easy to add through hook.
User/IP creation, modification- Easy to add through a hook.
Store incremental revisions- Easy to add through a hook
Integration
Field meta-information providedType, caption, possible values, mapped field, join table spec, encryption, serialization, UI-specific settings, validation rules.
UI extensionsSí CRUD, Form, Table, Grid, Entity-manager. (see https://github.com/atk4/ad)
API extensionsSí RestFULL API, automated CRUD operations + RPC https://github.com/atk4/api
Products
English
Public
Public
2017-12-20 01:05:19
View changes

User reviews and comments

  • Gowrav on 2016-10-25 19:16:29
    like this

    Couldn't work on any other framework/orm after switching to ATK. Its just how every programmer always wanted ...

  • Gowrav on 2016-10-25 18:51:02
    rated this Del artículo: Enterprise Compliance 5/5

    Using in Recent modules of our ERP

  • Gowrav on 2016-10-25 18:50:37
    rated this Del artículo: Simplicity 5/5

    Most simple among what I used (almost all popular ones)

  • Romans Malinovskis on 2016-10-24 02:18:39
    like this

    Not really an ORM, but offers much more powerful support for Domain Model.