수색…
새 저장소 만들기
원하는 곳에 새로운 저장소를 만들 수 있지만, 별도의 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