创建一个新的存储库

你可以随意创建一个新的存储库,但建议在单独的 Repository 文件夹中创建它们。

虽然你可以根据需要命名存储库文件和类,但建议将存储库名称命名为 EntityNameRepository,以便快速找到文件夹中的文件。

假设我们有一个 Project 实体,存储在 AppBundle\Entity 中,它看起来像这样:

<?php
    
namespace AppBundle\Entity;
    
use Doctrine\ORM\Mapping as ORM;

/**
 * Project Entity - some information 
 *
 * @ORM\Table(name="project")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ProjectRepository")
 */
class Project
{
   // definition of the entity with attributes, getters, setter whatsoever
}
    
?>

这里的重要部分是 @ORM\Entity(repositoryClass="AppBundle\Repository\ProjectRepository") 行,因为它将此 Entity 与给定的 Repository 类连接起来。

你还需要使用\Doctrine\ORM\Mapping 类来使用映射选项。

存储库本身非常简单

<?php

namespace AppBundle\Repository;

class ProjectRepository extends \Doctrine\ORM\EntityRepository
{
    public function getLastTenProjects()
    {
        // creates a QueryBuilder instance
        $qb = $this->_em->createQueryBuilder()
            ->select('p')
            ->from($this->_entityName, 'p')
            ->orderBy('p.id', 'DESC')
            ->setMaxResults(10)
        ;
        // uses the build query and gets the data from the Database
        return $qb->getQuery()->getResult();
    }
}

?>

重要的是要注意到 Repository 类必须扩展\Doctrine\ORM\EntityRepository,以便它可以正常工作。现在,你可以根据需要为不同的查询添加任意数量的函数。