2015-01-05 60 views
0

與學說多對多查詢我想知道有多少「afiliados」有一個「坎帕納」我怎樣才能做的Symfony2

如何查詢必須?

我的類別是:

<?php 


namespace Axonsystem\Bundles\CampanaBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="afiliado") 
*/ 
class Afiliado 
{ 

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255,nullable=true) 
*/ 
private $name; 


/** 
* @ORM\ManyToMany(targetEntity="Campana", inversedBy="afiliados") 
* @ORM\JoinTable(name="afiliado_campana") 
* 
*/ 
protected $campanas; 


.......... 

/** 
* @ORM\Entity 
* @ORM\Table(name="campana") 
*/ 
class Campana { 


/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 


/** 
* @ORM\ManyToMany(targetEntity="Afiliado", mappedBy="campanas",cascade={"persist"}) 
* 
*/ 
protected $afiliados; 


.............. 

我帶走了getter和setter方法以及一些atributes,這樣,內容顯示更加容易。

+0

是你的問題的語法和DB控制器或SQL本身? – bitoiu

回答

0

您需要使用的QueryBuilder來執行此查詢。我建議創建實體Afiliado存儲庫,並文士這樣的範圍內:

<?php 

namespace Axonsystem\Bundles\CampanaBundle\Entity\Repository; 

use Doctrine\ORM\EntityRepository; 

class AfiliadoRepository extends EntityRepository 
{ 
    public function countByCampana($campanaId) { 
     return $this->getEntityManager()->createQueryBuilder() 
      ->select('COUNT(a.id)') 
      ->from('CampanaBundle:Afiliado', 'a') 
      ->innerJoin('CampanaBundle:Campana', 'c', 'WITH', 'c.id = a.campanas') 
      ->where('c.id = :campanaId') 
      ->setParameter('campanaId', $campanaId) 
      ->getQuery() 
      ->getSingleScalarResult(); 
    } 
} 
+0

非常感謝您的支持。我會試試這個。我認爲它會起作用! –

0

使用查詢生成器,我覺得像這樣的事:

$qb->select("COUNT(f) as num_afiliados") 
    ->from('CampanaBundle\Entity\Campana', 's') 
    ->innerJoin('s.afiliados', 'f') 
    ->where('s.id=:id') 
    ->setParameter('id',$id); 

$ id包含要找出afiliados數量坎帕納的ID。

UPDATE

,如果你想獲取afiliados

$qb->select("f.name") 
     ->from('CampanaBundle\Entity\Campana', 's') 
     ->innerJoin('s.afiliados', 'f') 
     ->where('s.id=:id') 
     ->setParameter('id',$id); 

的名字,如果你有Symfony的工作只是適應查詢。假如你在一個控制器是:

$ret = $this->getDoctrine()->getEntityManager()->createQueryBuilder() 
       ->select("f.name") 
       ->from('CampanaBundle:Campana', 's') 
       ->innerJoin('s.afiliados', 'f') 
       ->where('s.id=:id') 
       ->setParameter('id', $id) 
       ->getQuery() 
       ->getResult(); 
+0

現在,如果我想知道afiliate的名字,我應該怎麼做查詢? –

+0

@ user3690919檢查更新。 – acontell

+0

非常感謝您的支持,它完美的工作! :) –