sterntours/vendor/gedmo/doctrine-extensions/example/run.php
2020-07-09 12:49:32 +02:00

79 lines
2.3 KiB
PHP

<?php
use Doctrine\ORM\Query;
use Gedmo\Translatable\TranslatableListener;
$executionStart = microtime(true);
$memoryStart = memory_get_usage(true);
$em = include 'em.php';
/**
* initialized in em.php
*
* Gedmo\Translatable\TranslationListener
*/
$repository = $em->getRepository('Entity\Category');
$food = $repository->findOneByTitle('Food');
if (!$food) {
// lets create some categories
$food = new Entity\Category();
$food->setTitle('Food');
$food->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Maistas'));
$fruits = new Entity\Category();
$fruits->setParent($food);
$fruits->setTitle('Fruits');
$fruits->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Vaisiai'));
$apple = new Entity\Category();
$apple->setParent($fruits);
$apple->setTitle('Apple');
$apple->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Obuolys'));
$milk = new Entity\Category();
$milk->setParent($food);
$milk->setTitle('Milk');
$milk->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Pienas'));
$em->persist($food);
$em->persist($milk);
$em->persist($fruits);
$em->persist($apple);
$em->flush();
}
// create query to fetch tree nodes
$query = $em
->createQueryBuilder()
->select('node')
->from('Entity\Category', 'node')
->orderBy('node.root, node.lft', 'ASC')
->getQuery()
;
// set hint to translate nodes
$query->setHint(
Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
);
$treeDecorationOptions = array(
'decorate' => true,
'rootOpen' => '',
'rootClose' => '',
'childOpen' => '',
'childClose' => '',
'nodeDecorator' => function ($node) {
return str_repeat('-', $node['level']).$node['title'].PHP_EOL;
},
);
// build tree in english
echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
// change locale
$query->setHint(TranslatableListener::HINT_TRANSLATABLE_LOCALE, 'lt');
// build tree in lithuanian
echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
$ms = round(microtime(true) - $executionStart, 4) * 1000;
$mem = round((memory_get_usage(true) - $memoryStart) / 1000000, 2);
echo "Execution took: {$ms} ms, memory consumed: {$mem} Mb";