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表示该表的数据库。完全限定表名允许您引用默认数据库之外的表。将变量替换为实际的数据库名称。