Как запросить доктрину для зависимых объектов в контроллере Symfony2

Я не нахожу пример здесь, в SO, поэтому я публикую свой вопрос:

У меня есть объект группы, объект магазина и объект транзакции.

В группе много магазинов, и магазин может принадлежать многим группам. В Group.php:

/**
    * @ORM\ManyToMany(targetEntity="Shop", inversedBy="groups")
    * @ORM\JoinTable(name="group_shop",
*      joinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")},
*      inverseJoinColumns={@ORM\JoinColumn(name="shop_id", referencedColumnName="id")}
*      )
**/
private $shops;

И в Shop.php

/**
* @ORM\ManyToMany(targetEntity="Group", mappedBy="shops")
*/
private $groups;

Затем магазин совершает транзакции. В Transaction.php:

/**
* @ORM\ManyToOne(targetEntity="Shop", inversedBy="transactions")
* @ORM\JoinColumn(name="shop_id", referencedColumnName="id")
* */
private $shop;

И в Shop.php:

/**
* @ORM\OneToMany(targetEntity="Transaction", mappedBy="shop")
**/
private $transactions;

Я хочу запросить все транзакции из группы. Это должно быть очень просто, купите, я ослеп.

Что я имею:

$query4 = $em->createQuery("SELECT t FROM MGFAppBundle:Transaction t 
WHERE t.date > :from AND t.date < :to AND t.shop IN (/* HERE I'M STUCK */)")-    >setParameters(array(
         'from' => $from
         'to' => $to
      ));

Я не знаю, правильный ли это подход или... ну, мне довольно сложно получить dql.

Как мне написать этот запрос dql?

Заранее спасибо.


person gomman    schedule 25.06.2013    source источник


Ответы (1)


В вашем репозитории сделайте что-то вроде этого:

public function findTransactionsByGroup(GroupInterface $group)
{
    return $this->createQueryBuilder('g')
        ->select('s.transactions')
        ->leftJoin('g.shops','s')
        ->where('s.group = :groupid')
        ->setParameter('groupid', $group->getId())
        ->getQuery()
        ->getResult();
}
person Nicolai Fröhlich    schedule 25.06.2013
comment
Благодарю. реальный запрос был намного сложнее, но это заставило меня двигаться дальше. - person gomman; 27.06.2013