hautelook/doctrine-extra-bundle

一个自动为所有实体仓库创建服务的 Symfony2 Bundle。

该包的规范仓库似乎已消失,因此该包已被冻结。

dev-master 2018-08-22 18:28 UTC

This package is not auto-updated.

Last update: 2022-01-22 01:13:40 UTC


README

Build Status

提供方便的 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)