如何使用jointable进行dql查询?

时间:2017-03-14 20:23:06

标签: php mysql sql doctrine-orm

我有这样的实体:

-Entity Frase:

password_path(resource_name)

-Entity Tema:

/**
* 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") } )
*
*/

我需要在dql中进行这样的查询:

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中的问题是我无法访问创建doctrine到数据库的表#te; tema_frase"进行此查询。

那么,如果我需要tema_frase,如何在dql中进行此查询?

Tables in my database

2 个答案:

答案 0 :(得分: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是frase表所在的位置。

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