hautelook / doctrine-extra-bundle
A Symfony2 Bundle that will automatically create services for all of your entity repositories.
This package's canonical repository appears to be gone and the package has been frozen as a result.
Installs: 58 333
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 20
Forks: 3
Open Issues: 1
Requires
- doctrine/orm: >=2.2.3,<2.7-dev
- symfony/finder: ~2.3
- symfony/framework-bundle: ~2.3
Requires (Dev)
- phpspec/prophecy-phpunit: ~1.0
- phpunit/phpunit: ~3.7
This package is not auto-updated.
Last update: 2022-01-22 01:13:40 UTC
README
Symfony2 bundle that provides convenient additions to doctrine:
Installation
After adding the hautelook/doctrine-extra-bundle
to your composer.json file, add the bundle to the application kernel:
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Hautelook\DoctrineExtraBundle\HautelookDoctrineExtraBundleBundle() // ... ); }
Automatic repositories services
You will need to configure some information about your entities/repositories, as well as what you would like the repository service IDs to look like:
hautelook_doctrine_extra: entity: location: %kernel.root_dir%/../src/VendorName/FooBundle/Entity repository_location: %kernel.root_dir%/../src/VendorName/FooBundle/Entity/Repository service_prefix: vendor_foo.entity.repository namespace: VendorName\FooBundle\Entity
After configuring, you will be able to access your repositories services by:
vendor_foo.entity.repository.foo
If the Foo entity has a custom repository, it will be used. Otherwise, it will be the default Doctrine\ORM\EntityManager
QueryBuilderHelper
This class is helpful when you need to join a lot of tables.
use Hautelook\DoctrineExtraBundle\ORM\QueryBuilderHelper; class UserRepository { public function getUserWithGroupsAndOrders($id) { $qb = $this->createQueryBuilder('user'); $qbHelper = new QueryBuilderHelper(); $qbHelper->joinPropertyTree( $qb, [ 'orders' => [ 'product' => [ 'skus', ], 'invoice', ], 'groups', ] ); return $qb->getQuery()->getSingleResult(); } }
This is even more helpful to not "hardcode" in the repository which relations you want fetched joined:
use Hautelook\DoctrineExtraBundle\ORM\QueryBuilderHelper; class UserRepository { public function getUser($id, array $propertyTree = array()) { $qb = $this->createQueryBuilder('user'); $qbHelper = new QueryBuilderHelper(); $qbHelper->joinPropertyTree($qb, $propertyTree); return $qb->getQuery()->getSingleResult(); } }
You can also control whether or not you want to left join, inner join, or if you want to fetch join or just join:
/** * @param QueryBuilder $qb * @param array $propertyTree * @param boolean $leftJoin * @param boolean $fetchJoin */ public function joinPropertyTree(QueryBuilder $qb, array $propertyTree, $leftJoin = true, $fetchJoin = true)