hautelook / doctrine-extra-bundle
一个自动为所有实体仓库创建服务的 Symfony2 Bundle。
该包的规范仓库似乎已消失,因此该包已被冻结。
dev-master
2018-08-22 18:28 UTC
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
提供方便的 doctrine 扩展的 Symfony2 bundle
安装
在将 hautelook/doctrine-extra-bundle 添加到您的 composer.json 文件后,将 bundle 添加到应用程序内核
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Hautelook\DoctrineExtraBundle\HautelookDoctrineExtraBundleBundle() // ... ); }
自动仓库服务
您需要配置有关您实体/仓库的一些信息,以及您希望仓库服务 ID 看起来的样子
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
配置后,您将通过以下方式访问您的仓库服务
vendor_foo.entity.repository.foo
如果 Foo 实体有一个自定义仓库,则将使用它。否则,它将是默认的 Doctrine\ORM\EntityManager
QueryBuilderHelper
当您需要连接很多表时,这个类非常有用。
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(); } }
这对于不在仓库中“硬编码”您想要连接获取的关联关系也更加有用
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(); } }
您还可以控制是否要左连接、内连接,或者您想要获取连接还是仅仅连接
/** * @param QueryBuilder $qb * @param array $propertyTree * @param boolean $leftJoin * @param boolean $fetchJoin */ public function joinPropertyTree(QueryBuilder $qb, array $propertyTree, $leftJoin = true, $fetchJoin = true)