Php 如何使用jointable进行dql查询?

Php 如何使用jointable进行dql查询?,php,mysql,sql,doctrine-orm,Php,Mysql,Sql,Doctrine Orm,我有以下几点: -实体框架: /** * 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") *

我有以下几点:

-实体框架:

/**
* 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") } )
*
*/
-实体Tema:

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中的问题是,我无法访问创建名为“tema_frase”的数据库的表来进行此查询

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


如果我正确理解了您的问题,您可以使用表名及其所在的数据库来限定表名

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表所在的位置。

如果我正确理解了您的问题,您可以使用它所在的数据库来限定表名

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表所在的位置。

这是解决方案:

$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();
这就是解决方案:

$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();

对不起,我不明白你的意思。什么包含变量$tema_frase?您没有指定存储表的数据库。。。因此,$tema_frase_db表示该表的数据库,$frase_db表示该表的数据库。完全限定表名允许您引用默认数据库之外的表。将变量替换为实际的数据库名称。对不起,我不明白您的意思。什么包含变量$tema_frase?您没有指定存储表的数据库。。。因此,$tema_frase_db表示该表的数据库,$frase_db表示该表的数据库。完全限定表名允许您引用默认数据库之外的表。将变量替换为实际的数据库名称。