2013-06-25 24 views
1

這裏我就不在SO找到一個例子,所以我張貼我的問題:如何查詢相關的實體學說中的Symfony2控制器

我有一組實體,實體店和交易的實體。

A組有許多商店和商店可以屬於多個組。在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

在你的倉庫做這樣的事情:

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(); 
} 
+0

感謝。真正的查詢方式更復雜,但是這讓我走了。 – gomman