2017-03-14 18 views
0

我有這樣的實體:如何使用jointable創建一個dql查詢?

-entity Frase:

/** 
* Frase 
* 
* @Entity 
* @Table(name="frase") }) 
* 
*/ 
class Frase { 

/** 
* @var int 
* 
* @Id 
* @GeneratedValue 
* @Column(type="integer") 
*/ 
private $id; 

/** 
* @var String 
* 
*@Column(type="string", length=200, name="texto") 
*/ 
private $text; 

/** 
* @var Autor 
* 
* @ManyToOne(targetEntity="Autor", inversedBy="frases") 
*/ 
private $autor; 

/** 
* @var Tema[] 
* 
* @ManyToMany(targetEntity="Tema", inversedBy="frases", 
* fetch="EAGER", cascade={"persist"}, orphanRemoval=true 
*) 
* @JoinTable(
* name="tema_frase", 
* inverseJoinColumns={ @JoinColumn(name="tema_id", referencedColumnName="tema_id") } 
*) 
*/ 
private $tema; 
... 

/** 
* Tema 
* 
* @Entity 
* @Table(name="tema") }) 
* 
*/ 

-entity特馬:

class Tema { 



/** 
* @var int 
* 
* @Id 
* @GeneratedValue 
* @Column(type="integer", name="tema_id") 
*/ 
private $id; 

/** 
* @var string 
* 
* @Column(type="string", length=50, name="nombre", unique=true) 
*/ 
private $nombre; 

/** 
* @var Frase[] 
* 
* @ManyToMany(targetEntity="Frase", mappedBy="tema") 
*/ 
private $frases; 

我需要做一個這樣的查詢中DQL:

SELECT DISTINCT(tema.nombre) as Tema, count(frase.texto)AS 'Nº Frases' FROM tema_frase RIGHT JOIN tema ON tema_frase.tema_id=tema.tema_id LEFT JOIN frase ON frase.id=tema_frase.frase_id GROUP BY tema.nombre 

但是在dql中的問題是我無法訪問創建datab的原則表ase叫做「tema_frase」來做這個查詢。

所以,我怎樣才能使DQL此查詢,如果我需要tema_frase?

Tables in my database

回答

0

這是解決方案:

$query = $entityManager->createQuery(" 

SELECT t.nombre, count(f.text) 
FROM Model\Tema t 
LEFT JOIN t.frases f 
GROUP BY t.nombre" 

); 

$result = $query->getResult(); 
0

如果我正確理解你的問題,你可以用它駐留的數據庫限定表名...

SELECT DISTINCT(tema.nombre) as Tema, count(frase.texto)AS 'Nº Frases' 
from $tema_frase_db.tema_frase 
LEFT JOIN $frase_db.frase ON frase.id=tema_frase.frase_id 
GROUP BY tema.nombre 

其中$ teme_frase_db是數據庫住房tema_frase表 和$ frase_db是擦除表所在的位置。

+0

對不起,我不理解你。什麼包含變量$ tema_frase? –

+0

您不指定存儲表的數據庫...所以$ tema_frase_db表示該表的數據庫,$ frase_db表示該表的數據庫。完全限定表名允許您在默認數據庫之外引用表。用實際的數據庫名稱替換變量。 – RMathis