如何在Symfony2控制器中查询依赖实体的原则

时间:2013-06-25 11:40:08

标签: php symfony doctrine entities dql

我在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查询?

提前致谢。

1 个答案:

答案 0 :(得分: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();
}