수색…


새 저장소 만들기

원하는 곳에 새로운 저장소를 만들 수 있지만, 별도의 Repository 폴더에 Repository 를 만드는 것이 좋습니다.

리포지토리 파일과 클래스의 이름을 원하는대로 지정할 수 있지만 리포지토리 EntityNameRepository 이름을 지정하여 폴더에있는 파일과 클래스를 빠르게 찾을 수 있습니다.

AppBundle\Entity 저장된 Project 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") .이 엔터티가 주어진 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 확장해야 제대로 작동 할 수 있습니다. 이제 원하는만큼 다른 쿼리에 대해 많은 함수를 추가 할 수 있습니다.

ExpressionBuilder IN () 함수

QueryBuilder에서 MySQL 명령 IN() 을 사용하려면 ExpressionBuilder 클래스의 in() 함수로 수행 할 수 있습니다.

// get an ExpressionBuilder instance, so that you
$expressionBulder = $this->_em->getExpressionBuilder();
$qb = $this->_em->createQueryBuilder()
->select('p')
->from($this->_entityName, 'p');
->where($expressionBuilder->in('p.id', array(1,2,3,4,5)));

return $qb->getQuery()->getResult();

하위 쿼리로 쿼리 만들기

예를 들어 select 문에서 하위 쿼리 select 문을 사용하는 방법을 보여주는 경우에만 주소를 아직 컴파일하지 않은 모든 사용자를 찾을 수 있다고 가정합니다 (레코드가 주소 테이블에 없음).

 // get an ExpressionBuilder instance, so that you
$expr = $this->_em->getExpressionBuilder();

// create a subquery in order to take all address records for a specified user id
$sub = $this->_em->createQueryBuilder()
    ->select('a')
    ->from($this->_addressEntityName, 'a')
    ->where('a.user = u.id');


$qb = $this->_em->createQueryBuilder()
    ->select('u')
    ->from($this->_userEntityName, 'u')
    ->where($expr->not($expr->exists($sub->getDQL())));

return $qb->getQuery()->getResult();


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow