SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
1.
Nashville LAMP
What is Doctrine?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
2.
Nashville LAMP
Doctrine is a ORM
written in PHP
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
3.
Nashville LAMP
What is an ORM?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
4.
Nashville LAMP
ORM stands for
Object Relational Mapper
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
5.
Nashville LAMP
Manipulate RDBMS
as a set of PHP objects
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
6.
Nashville LAMP
Easy to get started
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
7.
Nashville LAMP
Doctrine Sandbox
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
8.
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
10.
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
11.
Nashville LAMP
Build All Reload
$ php doctrine.php build-all-reload
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
12.
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
13.
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
14.
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
15.
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
16.
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
17.
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
18.
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
25.
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
26.
Nashville LAMP
Custom Accessors
Custom `name` accessor
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
27.
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
28.
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
29.
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
40.
Nashville LAMP
Database Migrations
Generate migration class
$ php doctrine generate-migrations-diff
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
41.
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
42.
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
43.
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
44.
Nashville LAMP
Database Migrations
Update models from YAML
$ php doctrine generate-models-yaml
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
45.
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
46.
Nashville LAMP
Future of Doctrine?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
47.
Nashville LAMP
New Versions
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
48.
Nashville LAMP
Doctrine 1.2
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
49.
Nashville LAMP
Continued evolution
of the 1.x codebase
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
50.
Nashville LAMP
Doctrine 2.0
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
51.
Nashville LAMP
Almost complete re-rewrite
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
52.
Nashville LAMP
Major version
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
53.
Nashville LAMP
Requires PHP 5.3
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
54.
Nashville LAMP
Performance increases from 5.3
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
55.
Nashville LAMP
Test suite runs
20% faster
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
56.
Nashville LAMP
And uses 30%
less memory
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
57.
Nashville LAMP
Hydration performance
improvements
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
58.
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
59.
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
60.
Nashville LAMP
No more crazy cyclic references
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
61.
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
62.
Nashville LAMP
Positive effects of
removing the base
class all around
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
63.
Nashville LAMP
General
Improvements
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
64.
Nashville LAMP
Code de-coupled
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
65.
Nashville LAMP
3 Main Packages
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
66.
Nashville LAMP
Common
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
67.
Nashville LAMP
DBAL
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
68.
Nashville LAMP
ORM
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
69.
Nashville LAMP
Use Doctrine DBAL
separate from the ORM
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
70.
Nashville LAMP
Easier to extend and override
things
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
71.
Nashville LAMP
Better support for
multiple databases
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
72.
Nashville LAMP
Sequences, schemas
and catalogs
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
73.
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
74.
Nashville LAMP
No more DSN nightmares
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
75.
Nashville LAMP
Connection information
specified as arrays
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
76.
Nashville LAMP
Removed old
attribute system
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
77.
Nashville LAMP
Replaced with simpler
string based system
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
78.
Nashville LAMP
Real Native SQL support
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
79.
Nashville LAMP
Driver Based
Meta Data
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
80.
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
81.
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
82.
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
83.
Nashville LAMP
Write your own driver
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
84.
Nashville LAMP
Cache
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
85.
Nashville LAMP
Query Cache
Cache final SQL that is parsed from DQL
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
86.
Nashville LAMP
Metadata Cache
Cache the parsing of meta data
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
87.
Nashville LAMP
Result Cache
Cache the results of your queries
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
88.
Nashville LAMP
Inheritance
Mapping
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
89.
Nashville LAMP
Single Table
One table per hierarchy
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
90.
Nashville LAMP
Class Table
One table per class
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
91.
Nashville LAMP
Concrete Table
One table per concrete class
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
92.
Nashville LAMP
Testing
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
93.
Nashville LAMP
Switched to phpUnit
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
94.
Nashville LAMP
Better mock testing
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
95.
Nashville LAMP
Easy to run tests against multiple
DBMS
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
96.
Nashville LAMP
Code de-coupled so
it is easier to test
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
97.
Nashville LAMP
New Features
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
98.
Nashville LAMP
New DQL Parser
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
99.
Nashville LAMP
Hand written
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
100.
Nashville LAMP
Recursive-descent
parser
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
101.
Nashville LAMP
Constructs AST
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
102.
Nashville LAMP
PHP Class names
directly represent
DQL language
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
103.
Nashville LAMP
Every DQL feature
has a class to handle
parsing
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
104.
Nashville LAMP
Easy to maintain
Easy to add new features
Easy to use
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
105.
Nashville LAMP
Performance?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
106.
Nashville LAMP
Final SQL can be
easily and effectively cached
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
107.
Nashville LAMP
Not practical to parse
every time
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
108.
Nashville LAMP
Custom
Column Types
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
109.
Nashville LAMP
Add your own data types
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
110.
Nashville LAMP
Types are OOP classes
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
111.
Nashville LAMP
Easy to extend
or add new types
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
112.
Nashville LAMP
Extend DQL
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
113.
Nashville LAMP
DQL parser can
be extended
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
114.
Nashville LAMP
Add your own
DQL functions
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
115.
Nashville LAMP
When?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
116.
Nashville LAMP
First release
in September 09`
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
117.
Nashville LAMP
ALPHA
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
118.
Nashville LAMP
BETA
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
119.
Nashville LAMP
RC
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
120.
Nashville LAMP
Stable - 2010’ ?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
121.
Nashville LAMP
What is next?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
122.
Nashville LAMP
Publishing of first
Doctrine book
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
123.
Nashville LAMP
Write more
documentation
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
124.
Nashville LAMP
Publish more books
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
125.
Nashville LAMP
Doctrine community
extension repository
Symfony has Plugins
and
Doctrine has Extensions
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
126.
Nashville LAMP
Default DBAL
and ORM in PEAR2?
De-facto standard?
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
127.
Nashville LAMP
It is up to you! :)
What is Doctrine? www.doctrine-project.org www.sensiolabs.com
128.
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