创建一个新的存储库
你可以随意创建一个新的存储库,但建议在单独的 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
,以便它可以正常工作。现在,你可以根据需要为不同的查询添加任意数量的函数。