Doctrine repository class içinde sorgu yazmak için ya createQueryBuilder ya da createQuery kullanırız. Not: Sorgularda join kullanmamızın nedeni, lazy load özelliğinin League varlığındaki kayıtları seçmek için extradan çalıştıracağı sorguyu engellemektir.


Örnek varlıklar


Bu bir one-to-many örnektir.


class Country
{
protected $id;

/**
* @ORM\OneToMany(
* targetEntity="League",
* mappedBy="country",
* cascade={"persist", "remove"}
* )
*/
protected $league;
}

class League
{
protected $id;

/**
* @ORM\ManyToOne(
* targetEntity="Country",
* inversedBy="league"
* )
* @ORM\JoinColumn(
* name="country_id",
* referencedColumnName="id",
* onDelete="CASCADE",
* nullable=false
* )
*/
protected $country;
}

Örnek 1


public function findAll()
{
return
$this
->createQueryBuilder('c')
->select('c, l')
->leftJoin('c.league', 'l')
->orderBy('c.name', 'ASC')
->getQuery()
->getResult();
}

public function findAllDql()
{
return
$this
->getEntityManager()
->createQuery(
'SELECT c, l
FROM FootballFrontendBundle:Country c
LEFT JOIN c.league l
ORDER BY c.name ASC'
)
->getResult();
}

Örnek 2


public function findOneById($id)
{
return
$this
->createQueryBuilder('c')
->select('c, l')
->leftJoin('c.league', 'l')
->where('c.id = :id')
->setParameter('id', $id)
->getQuery()
->getSingleResult();
}

public function findOneById($id)
{
return
$this
->getEntityManager()
->createQuery(
'SELECT c, l
FROM FootballFrontendBundle:Country c
LEFT JOIN c.league l
WHERE c.id = :id'
)
->setParameters(['id' => $id])
->getSingleResult();
}