jak přemigrovat slevomat na doctrine za jedno dopoledne
TRANSCRIPT
firemní “ORM”~200 entit
dibirepozitáře s fluent dotazy
vlastní řešení “second level cache”master a slave
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); });}
propojení starého řešení na novéspolečné připojení do DB
speciální datové typyidentity mapa
cache entit
$products = $productRepository ->createQueryBuilder('p') ->join('p.comments', 'c') ->where('c.author = 1') ->getQuery() ->getResult();
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
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;}
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);
$carts = CartList::getByUser($customer);//$carts = $carts->filterCanceled(false);$carts->deleteFromCache();
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