SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Jak přemigrovat Slevomat
na Doctrine
za jedno dopoledne
Josef Kříž / @pepakriz
firemní “ORM”
~200 entit
dibi
repozitáře s fluent dotazy
vlastní řešení “second level cache”
master a slave
$user = $em->create(User::class);
$user->create(...);
$user->save(); // fuj
public function getFoo()
{
return $this->databaseConnection
->select('*')
->from('foo')
->where('bar IS NULL')
->setupResult('setRowFactory' , function (array $row) {
return $this->em->getByDatabaseData (Foo::class, $row);
});
}
$ composer require kdyby/doctrine
8:00
Co budeme řešit?
propojení starého řešení na nové
společné připojení do DB
speciální datové typy
identity mapa
cache entit
8:10
Přepsat vše naráz?
8:15
Problém č. 1
200 entit? Ughh
8:20
Přepsat vše naráz?
8:30
Dvě ORM paralelně?
8:40
Problém č. 1
Asociace
$products = $productRepository
->createQueryBuilder('p')
->join('p.comments', 'c')
->where('c.author = 1')
->getQuery()
->getResult();
9:00
Dvě ORM paralelně?
9:10
Jedno ORM
9:10
Jedno ORM
● Metadata driver pro staré entity
● Společné connection pro ORM a dibi
● Vlastní typy
● Překlad požadavků ze starého ORM
9:15
Problém č. 1
Mapping
public static function getColumnMap()
{
static $map = [
'user' => [
'id' => 'id',
'email' => 'email',
],
];
return $map;
}
public static function getTypeMap()
{
static $map = [
'id' => '%i',
'email' => '%s',
];
return $map;
}
public static function getEntityMap()
{
static $map = [
'city' => 'cityId',
];
return $map;
}
public static function loadMetadata(ClassMetadata $metadata)
{
}
10:05
Problém č. 1
Mapping
10:10
Problém č. 2
Vlastní datové typy
10:15
DoctrineDBalTypesType
10:22
doctrine:
master:
types:
- SlevomatDoctrineTypeDateType
...
10:30
Problém č. 2
Vlastní datové typy
10:35
Problém č. 3
Transakce
KdybyDibiBridgeDibiExtension
10:40
10:42
Problém č. 3
Transakce
10:45
Problém č. 4
Starý EntityManager
function getByPrimary($className, $primaryValue);
function getByParams($className, array $params);
function getAllByParams($className, array $params);
function getByDatabaseData($className, $data,$useCache);
function saveEntity(DatabaseEntity $entity);
function deleteEntity(DatabaseEntity $entity);
10:51
Problém č. 5
Identity map
11:01
Problém č. 6
Vlastní “second level cache”
11:39
Problém č. 4
Starý EntityManager
11:48
Problém č. 7
Asociace ze starých
entit do nových
$carts = CartList::getByUser($customer);
//$carts = $carts->filterCanceled(false);
$carts->deleteFromCache();
11:59
Problém č. 7
Asociace ze starých
entit do nových
11:59
Hotovo
12:00
Shrnutí
● Metadata driver pro staré entity
● Společné connection pro ORM a dibi
● Vlastní typy
● Překlad požadavků ze starého ORM
● Postupný přechod
Dotazy?
Josef Kříž / @pepakriz

Weitere ähnliche Inhalte

Was ist angesagt?

ClojureScript
ClojureScriptClojureScript
ClojureScriptjakubkoci
 
Nette framework - How to compile an extensible di container
Nette framework - How to compile an extensible di containerNette framework - How to compile an extensible di container
Nette framework - How to compile an extensible di containerFilip Procházka
 
Czechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelCzechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelDennis Fridrich
 
Dependency injection v Nette 2.1 prakticky
Dependency injection v Nette 2.1 praktickyDependency injection v Nette 2.1 prakticky
Dependency injection v Nette 2.1 praktickyFilip Procházka
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Bohdan Ganický
 

Was ist angesagt? (8)

Kdyby/Events
Kdyby/EventsKdyby/Events
Kdyby/Events
 
Doctrine ORM & model
Doctrine ORM & modelDoctrine ORM & model
Doctrine ORM & model
 
ClojureScript
ClojureScriptClojureScript
ClojureScript
 
Nette framework - How to compile an extensible di container
Nette framework - How to compile an extensible di containerNette framework - How to compile an extensible di container
Nette framework - How to compile an extensible di container
 
Czechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelCzechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernel
 
Dependency injection v Nette 2.1 prakticky
Dependency injection v Nette 2.1 praktickyDependency injection v Nette 2.1 prakticky
Dependency injection v Nette 2.1 prakticky
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
 

Andere mochten auch

Zděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleně
Zděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleněZděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleně
Zděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleněMarketing Festival
 
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)Péhápkaři
 
Technologický background DámeJídlo
Technologický background DámeJídloTechnologický background DámeJídlo
Technologický background DámeJídloMartin Štekl
 
Vývojáři sobě: 0. sraz - PHP: Appka v Nette
Vývojáři sobě: 0. sraz - PHP: Appka v NetteVývojáři sobě: 0. sraz - PHP: Appka v Nette
Vývojáři sobě: 0. sraz - PHP: Appka v NetteVývojáři sobě
 
Co je ORM Designer
Co je ORM DesignerCo je ORM Designer
Co je ORM DesignerSkipper
 
Annotations in PHP: They Exist
Annotations in PHP: They ExistAnnotations in PHP: They Exist
Annotations in PHP: They ExistRafael Dohms
 

Andere mochten auch (8)

Zděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleně
Zděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleněZděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleně
Zděnek Linc (Slevomat.cz) - Facebook PPC - Prakticky, pokročile, cíleně
 
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
 
VŠE Doctrine 2 úvod
VŠE Doctrine 2 úvodVŠE Doctrine 2 úvod
VŠE Doctrine 2 úvod
 
Technologický background DámeJídlo
Technologický background DámeJídloTechnologický background DámeJídlo
Technologický background DámeJídlo
 
Vývojáři sobě: 0. sraz - PHP: Appka v Nette
Vývojáři sobě: 0. sraz - PHP: Appka v NetteVývojáři sobě: 0. sraz - PHP: Appka v Nette
Vývojáři sobě: 0. sraz - PHP: Appka v Nette
 
Asynchronně v PHP
Asynchronně v PHPAsynchronně v PHP
Asynchronně v PHP
 
Co je ORM Designer
Co je ORM DesignerCo je ORM Designer
Co je ORM Designer
 
Annotations in PHP: They Exist
Annotations in PHP: They ExistAnnotations in PHP: They Exist
Annotations in PHP: They Exist
 

Jak přemigrovat Slevomat na Doctrine za jedno dopoledne