Yii ORM
Likes 1
Name | Yii ORM |
---|---|
Sito web | yiiframework.com |
Github / Bitbucket / Sourceforge | github.com/... |
License | BSD-3 |
Latest version | 2.0.10 |
How schema is defined? | Active record magic properties. |
Code generation | Sì Web and console generator https://github.com/yiisoft/yii2-gii |
Can be used in Any Framework | - Planned in 2.1.x |
Automated Cache | Sì |
Anti-patterns (purposely included) | |
Audience | |
Dependencies | |
Simplicity | 5.0/5 2 ratings |
Enterprise Compliance | 4.5/5 2 ratings |
Minimum PHP Version | 5.4 |
Basic Features | |
PDO Support | Sì |
Transparent support for NoSQL | Sì Avialable cross sql and nosql datababase relations (https://github.com/yiisoft/yii2-mongodb) |
How to invoke db-vendor-specific extensions? | Sì SQL - Query Builder. |
Array as a persistence | Sì https://github.com/yii2tech/filedb |
RestAPI as a persistence | - To extend BaseActiveRecord |
JSON string as a persistence | - To extend BaseActiveRecord |
Same model, multiple persistences | - (no docs) |
Basic Single-record operations (C,R,U,D) | |
Table Name Mapping | Sì Using static method of active record. http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#declaring-ar-classes |
Field Name Mapping | Sì |
Map Entity to SubQuery | - table = new Expression(..) |
Map property to expression | - (couldn't find docs) |
Map native types (DateTime) | Sì Active record behaviors |
User-defined types (e.g. "23 USD") | Sì Active record behaviors |
Map field of related Entity ('currency' = currency_id->Model Currency.name) | Sì $model->currency->name |
Map field to sub-query on related entity (Client.balance = Client->orders->sum(total)) | - (couldn't find docs) |
Entity to join multiple tables (adding new record populates both tables) | No No native support. |
Criteria, Scope, Conditions (Model will refuse to work with records that does not match criteria) | |
Support model-level criteria | No |
Soft-delete | Sì Events and behaviors |
Domain Model Criteria | No Only for specific query: User::find()->byEmail('...')->active()->one() |
Expression-based condition | No Only for query: User::find()->andWhere('...')->all() |
Criteria Compliance (new record must match condition) | No |
Dynamic criteria | No Only Querying: User::find()->where(['a' => '1', 'b' => true])->all(); |
Query Building (Convert Model into Query object for further SQL tweaking) | |
Convert Model into Query Object | Sì \yii\db\ActiveRecord::find() |
Raw expression | Sì new \yii\db\Expression('...') |
Nested/Composite Queries/Expressions | Sì Expression can be in any part of query |
Reference domain-model field in query | No Field is class property. |
field, where, order, limit | Sì \yii\db\ActiveQuery |
options, rollup, partition | |
UPDATE, DELETE, INSERT query building | Sì |
REPLACE, TRUNCATE | - Throught raw sql in \yii\db\Command |
SHOW, DESCRIBE, CALL | - Throught raw sql in \yii\db\Command |
ALTER, CREATE query building | Sì |
User-defined query template | Sì (please link doc) |
full support for OR conditions | - |
Use Domain logic in multi-record update | No |
Data Fetching (different ways to retrieve data from database) | |
Get All Data (2x array) | Sì \yii\db\Query::all() |
Associative Array (id=>value) | |
Select only required fields | |
Typecasting (e.g. DateTime) | |
Import (multiple records) | |
Respect domain model mapping (and criteria) | |
Single row | Sì \yii\db\Query::one() |
Single Value | Sì \yii\db\Query::scalar() |
Single Column | Sì \yii\db\Query::column() |
Iterator | Sì |
Bypass persistence mapping | |
Loading and Saving individual records | |
Load by ID | Sì User::findOne(1) |
Load by other field | Sì User::findOne(['id' => 1]) |
Read-only Models | |
Model without primary key | |
Specify fields to load | Sì User::find()->select([])->one() |
Save only sends dirty fields | Sì |
Guarded / Fillable properties | |
Object Hierarchy Model | |
Admin extends User, adds criteria (is_admin=1) | No Can be done as wrapper: User::findAdmin(..) or custom CDbCriteria |
Admin extends User, adds accessible fields | No |
Extend model, add Join (Disjoined SubTypes) | No |
Extend model change table | |
Relations/References (One model can relate to another model. NOT A TABLE JOIN) | |
Model can define relation to other Model | Sì Relations |
One-to-Many | Sì |
One-to-many traversal strategy | Uses classical eager/lazy loading approach. with() can help pre-fetch the data for related entities. |
Lazy/Eager-loading | Sì |
One-to-One | Sì |
Many-to-Many | Sì relations() method of an entity can define. |
Deep Many-to-Many traversal. | - only with "to-one" references: $book->author->address->street; Executes multiple queries. |
Cross-Persistence traversal | - No docs. |
Cross-persistence joins, aggregation, reporting | |
Multi-persistence join | |
UNION existing models | |
Domain-model Aggregation | |
Model to Model join | |
Multi-persistence UNION | |
Behaviours / Hooks | |
Before/After operation | Sì |
Override standard C,R,U,D operations | Sì |
Persistence-specific hooks (to modify Query) | - (no docs) |
User-defined hooks | Sì |
Auditing | |
Global Auditing | |
Store old/new field values | Sì |
Revert action (undo) and replay (redo) | No |
Reactive actions | |
Store log in any persistence | No |
Override, Add fields to audit log | |
Custom events | Sì |
Access to record-specific history | - Through a custom query. |
Date of creation, modification | Sì \yii\behaviors\TimestampBehavior |
User/IP creation, modification | Sì \yii\behaviors\BlameableBehavior |
Store incremental revisions | |
Integration | |
Field meta-information provided | |
UI extensions | No |
API extensions |
User reviews and comments
Easiest ORM, I think!