What Is Doctrine?

67 %
33 %
Information about What Is Doctrine?

Published on May 20, 2009

Author: jwage

Source: slideshare.net

Description

Beginner presentation introducing the Doctrine ORM and the basic operations. Also talks a bit about some upcoming versions 1.2 and 2.0.

Nashville LAMP What is Doctrine? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Doctrine is a ORM written in PHP What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP What is an ORM? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP ORM stands for Object Relational Mapper What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Manipulate RDBMS as a set of PHP objects What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Easy to get started What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Doctrine Sandbox What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Doctrine Sandbox $ svn co http://svn.doctrine-project.org/branches/1.1 lamp_doctrine $ cd lamp_doctrine/tools/sandbox $ php doctrine.php Command Line What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP User: Test Schema columns: first_name: lamp_doctrine/tools/sandbox/schema/schema.yml type: string(255) notnull: true Phonenumber: last_name: columns: type: string(255) phonenumber: notnull: true type: string(55) username: notnull: true type: string(255) user_id: unique: true type: integer notnull: true notnull: true password: relations: type: string(255) User: notnull: true foreignAlias: Phonenumbers email_address: onDelete: CASCADE type: string(255) notnull: true email: true unique: true What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Test Data lamp_doctrine/tools/sandbox/data/fixtures/data.yml User: jwage: first_name: Jonathan last_name: Wage username: jwage password: changeme email_address: jonathan.wage@sensio.com Phonenumbers: cell: phonenumber: 6155139185 office: phonenumber: 4159925468 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Build All Reload $ php doctrine.php build-all-reload What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Running Tests • First DQL Query • Working with objects • Writing DQL Queries – SELECT queries – UPDATE queries – DELETE queries • Custom Accessors/Mutators • Using Migrations What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP First DQL Query $ php doctrine.php dql quot;FROM User u, u.Phonenumbers pquot; What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Working with Objects lamp_doctrine/tools/sandbox/index.php Insert new User $user = new User(); $user->first_name = 'Fabien'; $user->last_name = 'Potencier'; $user->username = 'fabpot'; $user->password = 'changeme'; $user->email_address = 'fabien.potencier@sensio.com'; $user->save(); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Working with Objects lamp_doctrine/tools/sandbox/index.php Edit existing User $userTable = Doctrine::getTable('User'); $user = $userTable->findOneByUsername('jwage'); $user->password = 'newpassword'; $user->save(); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Working with Objects lamp_doctrine/tools/sandbox/index.php Adding Phonenumbers $userTable = Doctrine::getTable('User'); $user = $userTable->findOneByUsername('fabpot'); $user->Phonenumbers[]->phonenumber = '1233451234'; $user->Phonenumbers[]->phonenumber = '9875674543'; $user->save(); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Working with Objects lamp_doctrine/tools/sandbox/index.php Deleting Objects $userTable = Doctrine::getTable('User'); $user = $userTable->findOneByUsername('fabpot'); $user->Phonenumbers[0]->delete(); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Working with Objects lamp_doctrine/tools/sandbox/index.php Deleting Collections $userTable = Doctrine::getTable('User'); $user = $userTable->findOneByUsername('fabpot'); $user->Phonenumbers->delete(); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Writing DQL Queries lamp_doctrine/tools/sandbox/index.php SELECT Queries $q = Doctrine::getTable('User') ->createQuery('u'); $users = $q->execute(); print_r($users->toArray()); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Writing DQL Queries Array ( [0] => Array ( [id] => 1 [first_name] => Jonathan [last_name] => Wage [username] => jwage [password] => changeme [email_address] => jonathan.wage@sensio.com ) [1] => Array ( [id] => 2 [first_name] => Fabien [last_name] => Potencier [username] => fabpot [password] => changeme [email_address] => fabien.potencier@sensio.com ) ) What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Writing DQL Queries lamp_doctrine/tools/sandbox/index.php SELECT Queries $q = Doctrine::getTable('User') ->createQuery('u') ->leftJoin('u.Phonenumbers p') ->andWhere('u.username = ?', 'jwage'); $users = $q->execute(); print_r($users->toArray(true)); $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Writing DQL Queries Array ( [0] => Array ( [id] => 1 [first_name] => Jonathan [last_name] => Wage [username] => jwage [password] => changeme [email_address] => jonathan.wage@sensio.com [Phonenumbers] => Array ( [0] => Array ( [id] => 1 [phonenumber] => 6155139185 [user_id] => 1 [User] => ) [1] => Array ( [id] => 2 [phonenumber] => 4159925468 [user_id] => 1 [User] => ) ) ) ) What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Writing DQL Queries lamp_doctrine/tools/sandbox/index.php UPDATE Queries $q = Doctrine::getTable('User') ->createQuery('u') ->update() ->set('email_address', '?', 'jonwage@gmail.com') ->andWhere('username = ?', 'jwage'); $affectedRows = $q->execute(); echo $affectedRows; // 1 $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Writing DQL Queries lamp_doctrine/tools/sandbox/index.php DELETE Queries $q = Doctrine::getTable('User') ->createQuery('u') ->delete() ->andWhere('username = ?', 'jwage'); $affectedRows = $q->execute(); echo $affectedRows; // 1 $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Accessors Enable Auto Accessor Override lamp_doctrine/tools/sandbox/config.php // ... $manager = Doctrine_Manager::getInstance(); $manager->setAttribute('auto_accessor_override', true); What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Accessors Custom `name` accessor What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Accessors lamp_doctrine/tools/sandbox/models/User.php class User extends BaseUser { public function getName() { return trim($this->first_name.' '.$this->last_name); } } What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Accessors lamp_doctrine/tools/sandbox/index.php $q = Doctrine::getTable('User') ->createQuery('u') ->andWhere('username = ?', 'jwage'); $user = $q->fetchOne(); echo $user->name; // Jonathan Wage $ php index.php What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Mutator MD5 encrypt passwords class User extends BaseUser { // ... public function setPassword($password) { $this->_set('password', md5($password)); } } What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Mutator MD5 encrypt passwords $q = Doctrine::getTable('User') ->createQuery('u') ->andWhere('username = ?', 'jwage'); $user = $q->fetchOne(); $user->password = 'changeme'; $user->save(); echo $user->password; // 4cb9c8a8048fd02294477fcb1a41191a What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Accessor/Mutator Syntax Object property, function, array access echo $user->name; echo $user->get('name'); echo $user['name']; What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Deploy schema changes What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Maintain production data What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Programmatic interface for issuing DDL statements What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Versions your database What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Upgrade your database to new versions Downgrade to previous versions What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Add new status column to users What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations User: columns: # ... status: type: enum values: [Pending, Active, Inactive] What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Generate migration class $ php doctrine generate-migrations-diff What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Generate migration class class Version1 extends Doctrine_Migration_Base { public function up() { $this->addColumn('user', 'status', 'enum', '', array('values' => array(0 => 'Pending', 1 => 'Active', 2 => 'Inactive'))); } public function down() { $this->removeColumn('user', 'status'); } } What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Customize migration class class Version1 extends Doctrine_Migration_Base { public function postUp() { Doctrine::loadModels(realpath(dirname(__FILE__).'/../models')); Doctrine::getTable('User') ->createQuery('u') ->update() ->set('status', '?', 'Active') ->execute(); } // ... } What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Executing migration $ php doctrine migrate migrate - migrated successfully to version #1 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Update models from YAML $ php doctrine generate-models-yaml What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Database Migrations Inspect migration was successful or not New status column exists Default `Active` value What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Future of Doctrine? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP New Versions What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Doctrine 1.2 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Continued evolution of the 1.x codebase What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Doctrine 2.0 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Almost complete re-rewrite What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Major version What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Requires PHP 5.3 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Performance increases from 5.3 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Test suite runs 20% faster What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP And uses 30% less memory What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Hydration performance improvements What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Hydration Performance Doctrine 1.1 4.3435637950897 for 5000 records Doctrine 2.0 1.4314442552312 for 5000 records Doctrine 2.0 3.4690098762512 for 10000 records What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Removed Major Limitation No need to extend a base class /** class User extends Doctrine_Record * @DoctrineEntity { * @DoctrineTable(name=quot;userquot;) public function setTableDefinition() */ { class User $this->hasColumn('id', 'integer', null, array( { 'primary' => true, /** 'auto_increment' => true * @DoctrineId )); * @DoctrineColumn(type=quot;integerquot;) * @DoctrineGeneratedValue(strategy=quot;autoquot;) $this->hasColumn('username', 'string', 255); */ } public $id; } /** * @DoctrineColumn(type=quot;varcharquot;, length=255) */ public $username; } What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP No more crazy cyclic references What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP print_r() your objects $user = new User(); $user->username = 'jwage'; print_r($user); User Object ( [id] => [username] => jwage ) What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Positive effects of removing the base class all around What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP General Improvements What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Code de-coupled What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP 3 Main Packages What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Common What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP DBAL What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP ORM What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Use Doctrine DBAL separate from the ORM What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Easier to extend and override things What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Better support for multiple databases What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Sequences, schemas and catalogs What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Simplified connection information $config = new DoctrineORMConfiguration(); $eventManager = new DoctrineCommonEventManager(); $connectionOptions = array( 'driver' => 'pdo_sqlite', 'path' => 'database.sqlite' ); $em = DoctrineORMEntityManager::create($connectionOptions, $config, $eventManager); What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP No more DSN nightmares What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Connection information specified as arrays What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Removed old attribute system What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Replaced with simpler string based system What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Real Native SQL support What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Driver Based Meta Data What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP PHP Annotations /** * @DoctrineEntity * @DoctrineTable(name=quot;userquot;) */ class User { /** * @DoctrineId * @DoctrineColumn(type=quot;integerquot;) * @DoctrineGeneratedValue(strategy=quot;autoquot;) */ public $id; /** * @DoctrineColumn(type=quot;varcharquot;, length=255) */ public $username; } What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP PHP Code class User { public $id, $username; } $metadata = new ClassMetadata('User'); $metadata->mapField(array( 'fieldName' => 'id', 'type' => 'integer', 'id' => true )); $metadata->setIdGeneratorType('auto'); $metadata->mapField(array( 'fieldName' => 'username', 'type' => 'varchar', 'length' => 255 )); What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP YAML class User { public $id, $username; } User: properties: id: id: true type: integer idGenerator: auto username: type: varchar length: 255 What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Write your own driver What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Cache What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Query Cache Cache final SQL that is parsed from DQL What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Metadata Cache Cache the parsing of meta data What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Result Cache Cache the results of your queries What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Inheritance Mapping What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Single Table One table per hierarchy What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Class Table One table per class What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Concrete Table One table per concrete class What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Testing What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Switched to phpUnit What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Better mock testing What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Easy to run tests against multiple DBMS What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Code de-coupled so it is easier to test What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP New Features What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP New DQL Parser What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Hand written What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Recursive-descent parser What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Constructs AST What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP PHP Class names directly represent DQL language What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Every DQL feature has a class to handle parsing What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Easy to maintain Easy to add new features Easy to use What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Performance? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Final SQL can be easily and effectively cached What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Not practical to parse every time What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Custom Column Types What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Add your own data types What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Types are OOP classes What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Easy to extend or add new types What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Extend DQL What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP DQL parser can be extended What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Add your own DQL functions What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP When? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP First release in September 09` What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP ALPHA What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP BETA What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP RC What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Stable - 2010’ ? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP What is next? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Publishing of first Doctrine book What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Write more documentation What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Publish more books What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Doctrine community extension repository Symfony has Plugins and Doctrine has Extensions What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Default DBAL and ORM in PEAR2? De-facto standard? What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP It is up to you! :) What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Nashville LAMP Questions? Jonathan H. Wage jonathan.wage@sensio.com +1 415 992 5468 sensiolabs.com | doctrine-project.org | sympalphp.org | jwage.com You can contact Jonathan about Doctrine and Open-Source or for training, consulting, application development, or business related questions at jonathan.wage@sensio.com What is Doctrine? www.doctrine-project.org www.sensiolabs.com

Add a comment

Related pages

Home — Doctrine Project

Welcome to the Doctrine Project. The Doctrine Project is the home to several PHP libraries primarily focused on database storage and object mapping.
Read more

Doctrine (PHP) – Wikipedia

Doctrine orientiert sich an Hibernate, einem ähnlichen Projekt für Java. Datenbankabfragen können in der Doctrine-eigenen Zwischensprache Doctrine Query ...
Read more

Doctrine – Wikipedia

Doctrine steht für: Doctrine (PHP), Framework zur objektrelationalen Abbildung; The Anti Doctrine, deutsche Band; Fairness Doctrine, Rundfunkrichtline der USA
Read more

Doctrine - Wikipedia, the free encyclopedia

Doctrine (from Latin: doctrina) is a codification of beliefs or a body of teachings or instructions, taught principles or positions, as the essence of ...
Read more

dict.cc Wörterbuch :: doctrine :: Deutsch-Englisch-Übersetzung

Deutsch-Englisch-Übersetzung für: doctrine ... Dieses Deutsch-Englisch-Wörterbuch basiert auf der Idee der freien Weitergabe von Wissen.
Read more

dict.cc | doctrine | Wörterbuch Englisch-Deutsch

Übersetzung für doctrine im Englisch-Deutsch-Wörterbuch dict.cc.
Read more

Doctrine (PHP) - Wikipedia, the free encyclopedia

The Doctrine Project (or Doctrine) is a set of PHP libraries primarily focused on providing persistence services and related functionality.
Read more

Doctrine - definition of doctrine by The Free Dictionary

Define doctrine. doctrine synonyms, doctrine pronunciation, doctrine translation, English dictionary definition of doctrine. n. 1.
Read more

Doctrine | Define Doctrine at Dictionary.com

Doctrine definition, a particular principle, position, or policy taught or advocated, as of a religion or government: Catholic doctrines; the Monroe Doctrine.
Read more

Object Relational Mapper — Doctrine Project

Object Relational Mapper. Latest Version: 2.5; Issues; Latest Documentation; Latest API; Browse Source; Object relational mapper (ORM) for PHP that sits on ...
Read more