+ All Categories
Home > Software > Jak přemigrovat Slevomat na Doctrine za jedno dopoledne

Jak přemigrovat Slevomat na Doctrine za jedno dopoledne

Date post: 16-Aug-2015
Category:
Upload: josef-kriz
View: 301 times
Download: 2 times
Share this document with a friend
40
Jak přemigrovat Slevomat na Doctrine za jedno dopoledne Josef Kříž / @pepakriz
Transcript

Jak přemigrovat Slevomat na Doctrine

za jedno dopoledneJosef Kříž / @pepakriz

firemní “ORM”~200 entit

dibirepozitář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é typyidentity 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

Doctrine\DBal\Types\Type

10:22

doctrine:master:

types:- Slevomat\Doctrine\Type\DateType...

10:30

Problém č. 2

Vlastní datové typy

10:35

Problém č. 3

Transakce

Kdyby\DibiBridge\DibiExtension

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 č. 6Vlastní “second level cache”

11:39

Problém č. 4

Starý EntityManager

11:48

Problém č. 7

Asociace ze starýchentit do nových

$carts = CartList::getByUser($customer);//$carts = $carts->filterCanceled(false);$carts->deleteFromCache();

11:59

Problém č. 7

Asociace ze starýchentit 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


Recommended