Upload
asmir-mustafic
View
222
Download
0
Embed Size (px)
Citation preview
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
1/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
2/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Updated DoctrineBundle
Doctrine2 features fully integrated Database Abstraction Layer Object Relational Mapper
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
3/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DoctrineMongoDBBundle
MongoDB Object Document Mapper Transparent persistence to MongoDB Same architecture as ORM Map a class as an entity and document
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
4/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DoctrineMigrationsBundle
Integration with the database migrationsproject.
Easily manage and deploy di f erent versionsof your database.
Generate migrations when you change yourschema mapping information
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
5/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DBAL
To use just the DBAL you must congure it:
doctrine.dbal : dbname: Symfony user: root password: ~
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
6/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
7/55Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DBAL Console Commands
Create all congured databases
Create a specic database
Drop all congured databases
Drop a specic database
$ php cons ole doctrine:datab ase:create
$ php cons ole doctrine:datab ase:create --co nnection=d efault
$ php cons ole doctrine:datab ase:drop
$ php cons ole doctrine:datab ase:drop --con nection=de fault
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
8/55Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DBAL Console Commands
Execute SQL queries
Specify connection
$ php cons ole doctrine:query :sql SELECT * FROM us er
$ php cons ole doctrine:query :sql ... --conn ection=defa ult
http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
9/55Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DBAL
Get the default congured databaseconnection:
class MyController ext ends Doctrin eControl ler{
public function indexAction (){
$conn = $this -> getDatabaseConnection();
// ...
}}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
10/55Doctrine 2 www.doctrine-project.org www.sensiolabs.com
DBAL
Get a congured database connection serviceby its name:
class MyController exten ds DoctrineC ontroller{
public function indexAction (){
$conn = $this -> getDatabaseConnection( 'default' );
// ...}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
11/55Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
The EntityManager Central place for persisting and retrieving entities Multiple instances allowed One EntityManager per database connection
Dependency Injection handles the creation andmanagement of entity manager services
$config = new \ Doctrine \ ORM\Configuration ();$config -> setMetadataCacheImpl( new \ Doctrine \ Common\ Cache \ ArrayCache );$driverImpl = $config -> newDefaultAnnotationDriver( array ( __DIR__ . "/Entities" ));$config -> setMetadataDriverImpl( $driverImpl );
$config -> setProxyDir( __DIR__ . '/Proxies' );$config -> setProxyNamespace( 'Proxies' );
$connectionOptions = array ( 'driver' => 'pdo_sqlite' , 'path' => 'database.sqlite');
$em = \ Doctrine \ ORM\ EntityManager :: create( $connectionOptions , $config );
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
12/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
What is an Entity? It is a regular PHP objectthat has been mapped to the Doctrine2 ORM:/** @Entity */class User{ /**
* @Id @Column(type="integer")* @GeneratedValue*/
private $id ;
/** @Column(type="string", length=255) */ private $name ;
public function getId (){
return $this -> id ;}
public function getName (){
return $this -> name;}
public function setName ( $name){
$this -> name = $name;}
}
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
13/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
14/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Congure an entity manager to start usingthe ORM:
doctrine.or m:
default_entity_manager: default cache_driver: apc # array, apc, memcache, xcache entity_managers: default: connection: default
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
15/55
Console commands implemented forimproved developer workow:
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
16/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Console commands implemented forimproved developer workow: Ensure production settings Clear metadata, query and result cache Load data xtures
Create and drop congured databases Generate entities from mapping information Generate new skeleton entities Generate skeleton entity repository classes Convert mapping information between formats
Convert a Doctrine1 schema Import mapping information from an existing database Execute DQL and SQL queries Create, drop and update database schema from mapping information
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
17/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Get the default congured entity managerservice:
class MyController extend s DoctrineCon troller
{ public function indexAction (){
$em = $this -> getEntityManager();
// ...}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
18/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
19/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Persisting entities is as simple as creating theobject and telling Doctrine to persist it:class MyController extends DoctrineContro ller{ public function createAction ()
{ $em = $this -> getEntityManager();
$user = new User (); $user -> setName( 'Jonathan H. Wage' ); $em-> persist( $user );
$em-> flush(); // ...
}}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
20/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Creating Query instances and issue DQLqueries to retrieve objects:class MyController extends DoctrineControl ler{ public function indexAction ()
{ $em = $this -> getEntityManager(); $query = $em-> createQuery( 'select u from MyBundle:User u' );
$users = $query -> execute();
// ...}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
21/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Creating QueryBuilder instances toprogramatically build DQL queries through auent interface:
class MyController extends Doct rineController{ public function indexAction ()
{ $em = $this -> getEntityManager(); $qb = $em-> createQueryBuilder() -> select( 'u' ) -> from( 'MyBundle:User' , 'u' );
$query = $qb -> getQuery(); $users = $query -> execute();
// ...}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
22/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Update your database schema duringdevelopment as your domain model evolves
Add a new column to our User entity
/** @Entit y */class User{ // ...
/** @Column(type="string", length=255) */ private $email ;}
http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
23/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
ORM
Run update command to update yourdatabase schema from mapping information
The above compares your current databaseschema to your new mapping information andexecutes the necessary queries to bring yourdatabase up-to-date.
$ php cons ole doctrine:sche ma:update
http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
24/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Object Document Mapper
New Doctrine Project for persisting objects toMongoDB
Same architecture as ORM
Transparently persist PHP5 objects toMongoDB
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
25/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
The DocumentManager Central place for persisting and retrieving documents Multiple instances allowed
Dependency Injection handles the creation andmanagement of document manager services
$config = new Configuration ();
$config -> setProxyDir( __DIR__ . '/Proxies' );$config -> setProxyNamespace( 'Proxies' );$config -> setDefaultDB( 'doctrine_odm_sandbox' );
$reader = new AnnotationReader ();$reader -> setDefaultAnnotationNamespace( 'Doctrine\ODM\MongoDB\Mapping \\ ' );$config -> setMetadataDriverImpl( new AnnotationDriver ( $reader , __DIR__ . '/Documents' ));
$dm = DocumentManager :: create( new Mongo(), $config );
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
26/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
27/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
If the defaults are good enough for you thenyou can omit all the previous options:
doctrine_odm.mongodb : ~
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
28/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
What is a Document? It is a regular PHP objectthat has been mapped to the MongoDB ODM:/** @Document */class User{ /**
* @Id
*/ private $id ;
/** @String */ private $name ;
public function getId (){
return $this -> id ;}
public function getName (){
return $this -> name;}
public function setName ( $name ){
$this -> name = $name ;}
}
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
29/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Get the default congured documentmanager:
class MyController extend s DoctrineCon troller
{ public function indexAction (){
$dm = $this -> getDocumentManager();
// ...
}}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
30/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Get a congured document manager by itsname:
class MyController extend s DoctrineCon troller{ public function indexAction ()
{ $dm = $this -> getDocumentManager ( 'default' );
// ...
}}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
31/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Just like the ORM persisting documents iseasy:class MyController extends DoctrineContro ller{ public function createAction ()
{ $dm = $this -> getDocumentManager();
$user = new User (); $user -> setName( 'Jonathan H. Wage' ); $dm-> persist( $user );
$dm-> flush(); // ...
}}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
32/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Change tracking All objects are tracked in an identity map Changesets are calculated on ush Changesets are used to perform updates using
the atomic operators The following code results in an e cient mongo update
with only the properties that need updated:
$user -> s etName( 'new n ame' );$dm-> flush();
Array(
[$set] => Array(
[name] => new name)
)
->
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
33/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Traditional MongoDB nd() and ndOne()
$users = $dm-> find( 'User ' , $criteria ) ;
$query = $dm-> findOne( 'User' , array ( 'username' => 'jwage' ));$user = $query -> getSingleResult();
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
34/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Query API for building MongoDB queriesthrough a uent OO interface:
class MyController extend s DoctrineCon troller{ public function indexAction ()
{ $dm = $this -> getDocumentManager(); $query = $dm-> createQuery( 'MyBundle:User' );
$users = $query -> execute();
// ...}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
35/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
36/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Fluent Query interface generates andexecutes nd() and ndOne() methodsinternally
Query information is collected via uent oointerface and executed later
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
37/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Document Query Language (DQL) SQL like grammar for querying MongoDB
Query types supported Find Insert Update
Remove
http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
38/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
39/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Selecting elds
$query = $dm-> query( 'find username, pass word User' );
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
40/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
$slice operator for paging embeddedcollections
$query = $dm-> query( 'fin d comments sk ip 20 lim it 10 Post' );
Array([comments] => Array
([$slice] => Array
([0] => 20
[1] => 10)
)
)
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
41/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
42/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Complex update$query = $dm-> query( " update User inc coun t = 1, incviews = 2, set username = 'jwage'" );
Array([$inc] => Array
([count] => 1[views] => 2
)
[$set] => Array(
[username] => jwage)
)
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
43/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
MongoDB ODM
Document Query Language (DQL) atomic operators skip and limit main results skip and limit embedded documents use dot notation for querying embedded
documents embed JSON values in your DQL syntax
$query = $dm-> query( "upda te User pushA ll groups = '[1, 2, 3]'" );
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
44/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations
New DoctrineMigrationsBundle containsintegration with the Doctrine DatabaseMigrations project
Migrations have been completely re-writtenfrom Doctrine1 and are an extension of thedatabase abstraction layer
http://www.doctrine-project .org/projects/m igrations
http://www.sympalphp.org/http://www.sensiolabs.com/http://www.doctrine-project.org/projects/migrationshttp://www.doctrine-project.org/projects/migrationshttp://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
45/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations
Migration classes:
class Versi on20100416130401 extends Abstra ctMigratio n{
public function up ( Schema $schema ){
}
public function down( Schema $schema ){
}}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
46/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations
Manually execute SQL for migrations:
class Versi on20100416130422 extends Abstra ctMigratio n{ public function up ( Schema $schema )
{ $this -> _addSql( ' CREATE TABLE addresses (id INT NOT NULL, streetVARCHAR( 255 ) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB ' );
}
public function down( Schema $schema ){
$this -> _addSql( 'DROP TABLE addresses' );}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
47/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations
Use API of Schema objects to performmigration:
class Versi on20100416130401 extends Abstra ctMigratio n{ public function up ( Schema $schema )
{ $table = $schema -> createTable( 'users' ); $table -> addColumn( 'username' , 'string' ); $table -> addColumn( 'password' , 'string' );
}
public function down( Schema $schema ){
$schema -> dropTable( 'users' );}
}
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
48/55
8/6/2019 symfony2anddoctrine-100623202058-phpapp01
49/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations
Execute migration dry runs:
Omit --dry-run to execute migration.
$ ./doctrine migra tions:migrate --dry-run Are you sure you w ish to continue?
yExecuting dry run of migration up to 20100416130452 from 0
>> migrating 20100416130452
-> CREATE TABLE users (username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL) ENGINE = InnoDB
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
50/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations Specify a version number to revert to or 0 to
revert all migrations:
$ ./doctrine migra tions:migrate 0 Are you sure you w ish to continue?
yMigrating down to 0 from 20100416130401
-- reverting 20100416130401
-> DROP TABLE users
-- reverted
b
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
51/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations Write migration SQL le instead of executing:
It would produce a le like:
$ ./doctrine migra tions:migrate --write-sqlExecuting dry run of migration up to 2010041 6130401 from 0
>> migrating 20100416130401
-> CREATE TABLE users (username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL) ENGINE = InnoDB
Writing migration file to "/path/to/sandbox/doctrine_migration_20100416130405.sql"
# Doctrine Migrati on File Generated on 2010- 04-16 13:04:05# Migrating from 0 to 20100416130422
# Version 20100416130401CREATE TABLE users (username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL) ENGINE = InnoDB;
b
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
52/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations Integration with ORM for generating
migrations when you change your mappinginformation. Add a new property to yourEntity:
Run the migrations di f command:$ ./doctrine migra tions:diffGenerated new migr ation class to "/path/to/m igrations/DoctrineMigrat ions/Version2010 0416130459.php" from schema differences.
/** @Entity @Table(name="users ") */ class User
{ /**
* @var string $test*/
private $test;
// ...}
b i i
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
53/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations The generated migration class looks like:
It contains the SQL statements required toupdate your database with the schemachanges.
class Version2 0100416130459 extends AbstractMigration{ public function up ( Schema $schema )
{ $this -> _addSql( ' ALTER TABLE users ADD test VARCHAR( 255 ) NOT NULL' );
}
public function down( Schema $schema ){
$this -> _addSql( ' ALTER TABLE users DROP test ' );}
}
D b Mi i
http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
54/55
Doctrine 2 www.doctrine-project.org www.sensiolabs.com
Database Migrations Run migrate command to execute the
generated migration:
Now your database is up to date and containsthe new column named test.
$ ./doctrine migra tions:migrate
http://www.sympalphp.org/http://www.sensiolabs.com/http://www.sensiolabs.com/http://www.sympalphp.org/http://www.sympalphp.org/8/6/2019 symfony2anddoctrine-100623202058-phpapp01
55/55