我有这样的实体:
-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中进行此查询?
答案 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();