Comparateur de taille
English Español


PHP Data Access Libraries (ORM, ActiveRecord, Persistence)
Github / Bitbucket /
Dernière version2.0.10
How schema is defined?Active record magic properties.
Code generationOui Web and console generator
Can be used in Any Framework- Planned in 2.1.x
Automated CacheOui
Anti-patterns (purposely included)
5.0/5 2 notes
Enterprise Compliance
4.5/5 2 notes
Minimum PHP Version5.4
Basic Features
PDO SupportOui
Transparent support for NoSQLOui Avialable cross sql and nosql datababase relations (
How to invoke db-vendor-specific extensions?Oui SQL - Query Builder.
Array as a persistenceOui
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 MappingOui Using static method of active record.
Field Name MappingOui
Map Entity to SubQuery- table = new Expression(..)
Map property to expression- (couldn't find docs)
Map native types (DateTime)Oui Active record behaviors
User-defined types (e.g. "23 USD")Oui Active record behaviors
Map field of related Entity ('currency' = currency_id->Model $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)Non No native support.
Criteria, Scope, Conditions (Model will refuse to work with records that does not match criteria)
Support model-level criteriaNon
Soft-deleteOui Events and behaviors
Domain Model CriteriaNon Only for specific query: User::find()->byEmail('...')->active()->one()
Expression-based conditionNon Only for query: User::find()->andWhere('...')->all()
Criteria Compliance (new record must match condition)Non
Dynamic criteriaNon 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 ObjectOui \yii\db\ActiveRecord::find()
Raw expressionOui new \yii\db\Expression('...')
Nested/Composite Queries/ExpressionsOui Expression can be in any part of query
Reference domain-model field in queryNon Field is class property.
field, where, order, limitOui \yii\db\ActiveQuery
options, rollup, partition
UPDATE, DELETE, INSERT query buildingOui
REPLACE, TRUNCATE- Throught raw sql in \yii\db\Command
SHOW, DESCRIBE, CALL- Throught raw sql in \yii\db\Command
ALTER, CREATE query buildingOui
User-defined query templateOui (please link doc)
full support for OR conditions-
Use Domain logic in multi-record updateNon
Data Fetching (different ways to retrieve data from database)
Get All Data (2x array)Oui \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 rowOui \yii\db\Query::one()
Single ValueOui \yii\db\Query::scalar()
Single ColumnOui \yii\db\Query::column()
Bypass persistence mapping
Loading and Saving individual records
Load by IDOui User::findOne(1)
Load by other fieldOui User::findOne(['id' => 1])
Read-only Models
Model without primary key
Specify fields to loadOui User::find()->select([])->one()
Save only sends dirty fieldsOui
Guarded / Fillable properties
Object Hierarchy Model
Admin extends User, adds criteria (is_admin=1)Non Can be done as wrapper: User::findAdmin(..) or custom CDbCriteria
Admin extends User, adds accessible fieldsNon
Extend model, add Join (Disjoined SubTypes)Non
Extend model change table
Relations/References (One model can relate to another model. NOT A TABLE JOIN)
Model can define relation to other ModelOui Relations
One-to-many traversal strategyUses classical eager/lazy loading approach. with() can help pre-fetch the data for related entities.
Many-to-ManyOui 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 operationOui
Override standard C,R,U,D operationsOui
Persistence-specific hooks (to modify Query)- (no docs)
User-defined hooksOui
Global Auditing
Store old/new field valuesOui
Revert action (undo) and replay (redo)Non
Reactive actions
Store log in any persistenceNon
Override, Add fields to audit log
Custom eventsOui
Access to record-specific history- Through a custom query.
Date of creation, modificationOui \yii\behaviors\TimestampBehavior
User/IP creation, modificationOui \yii\behaviors\BlameableBehavior
Store incremental revisions
Field meta-information provided
UI extensionsNon
API extensions
21 déc. 2017 16:45:09
Voir les modifications

Avis utilisateurs et commentaires

  • Abdur Rob le 28 jan. 2017 06:39:20
    a noté ce Elément: Simplicité 5/5

    Easiest ORM, I think!