Symfony2-计数行/联接表
我是Symfony2的乞丐 我有一个表格教程和另一个表格“Groupe\u de\u categories”,由“id\u Groupe\u categorie”链接 表格教程: 表Groupe_de_类别 在我的例子“Maison”、“Art&Loisir”、“Enseignment”中,我需要计算每个标题的类别。。。我有多少个教程,其中TUTORIEL_controle='否' 在使用Synfony2之前,我用PHP编写了以下代码:Symfony2-计数行/联接表,symfony,doctrine-orm,count,Symfony,Doctrine Orm,Count,我是Symfony2的乞丐 我有一个表格教程和另一个表格“Groupe\u de\u categories”,由“id\u Groupe\u categorie”链接 表格教程: 表Groupe_de_类别 在我的例子“Maison”、“Art&Loisir”、“Enseignment”中,我需要计算每个标题的类别。。。我有多少个教程,其中TUTORIEL_controle='否' 在使用Synfony2之前,我用PHP编写了以下代码: <?php $query_nb_cat =
<?php
$query_nb_cat = "SELECT CATEGORIE, COUNT(*)
FROM Tutoriels
INNER JOIN Groupe_de_categories
ON TUTORIEL.id_groupe_categorie = Groupe_de_categories.id_groupe_categorie
WHERE tutoriel_controle='no'
GROUP BY CATEGORIE_TITLE";
$nb_cat = mysqli_query($BDD_connect, $query_nb_cat)or die(log_mysql($query_nb_cat));
$row_nb_cat = mysqli_fetch_assoc($nb_cat);
do {
$tableau_nb_cat[]=array(
'titre_cat_nv1'=>$row_nb_cat['titre_categorie_nv1'],
'compte_cat_nv1'=>$row_nb_cat['COUNT(*)'],
);
} while ($row_nb_cat = mysqli_fetch_assoc($nb_cat));
$val_cat=array(
'valeur_retour'=>$tableau_nb_cat
);
mysqli_free_result($nb_cat);
mysqli_close($BDD_connect);
?>
分组分类分组分类:
谢谢 您可以在此处创建存储库更多信息: 您可以使用条令查询语言 但我认为你的结构是错误的,最好有一个类别,这个类别有一个父类别 例如,你会有一个根猫哥,他的孩子叫布里科拉奇,体育。。。 例如,砖块将有一个类别,如儿童时期,等等 可以通过在存储库中使用createQueryBuilder来完成,也可以将当前查询用作 下面是一个示例,我假设您的实体的名称是tutorials和groupedeCographies 在您的实体中,我找不到要在GroupBy中使用的CATEGORIE_标题和要在选择中添加的CATEGORIE;所以我把它们按标题分类。您可以为选择添加更多字段。 也许这个链接对你的帮助更大我做到了:
public function updateAction($type_update)
{
$request = Request::createFromGlobals();
$result = $request->isXmlHttpRequest();
if ($result === true) {
switch ($type_update) {
case "compteur_menu":
$em = $this->getDoctrine()->getManager();
$result = $em->createQuery("
SELECT TC.titreCategorieNv1, COUNT(TC.titreCategorieNv1) AS num
FROM Video2LearnBddBundle:Tutoriels T
INNER JOIN T.idGroupeCategorie GC
INNER JOIN GC.titreCategorieNv1 TC
WHERE T.tutorielControle='non'
GROUP BY TC.titreCategorieNv1"
)
->getResult();
$response = new Response();
$response->setStatusCode(Response::HTTP_OK);
$response->setContent(json_encode($result));
$response->headers->set('Content-Type', 'application/json');
return $response;
default:
break;
}
}
}
很好,谢谢!但我怎么能得到这样的回报:Maison=>3 Art&Loisir=>9 Enseignment=>14,因为有了它,我就有了计数。。。如何将分类的名称与计数相关联?就像在我的PHP示例中做数组之类的事情。这是怎么解决的呢?您没有使用任何Group By,您完全更改了问题中提到的查询!
<?php
namespace Video2Learn\BddBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* GroupeDeCategories
*
* @ORM\Table(name="Groupe_de_categories", indexes={
* @ORM\Index(name="fk_Groupe_de_categories_Categories_nv11_idx", columns={"titre_categorie_nv1"}),
* @ORM\Index(name="fk_Groupe_de_categories_Categories_nv21_idx", columns={"titre_categorie_nv2"}),
* @ORM\Index(name="fk_Groupe_de_categories_Categories_nv31_idx", columns={"titre_categorie_nv3"}),
* @ORM\Index(name="fk_Groupe_de_categories_Categories_nv41_idx", columns={"titre_categorie_nv4"}),
* @ORM\Index(name="fk_Groupe_de_categories_Categories_nv51_idx", columns={"titre_categorie_nv5"})
* })
* @ORM\Entity
*/
class GroupeDeCategories
{
/**
* @var integer
*
* @ORM\Column(name="id_groupe_categorie", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idGroupeCategorie;
/**
* @var \CategoriesNv1
*
* @ORM\ManyToOne(targetEntity="Video2Learn\BddBundle\Entity\CategoriesNv1", inversedBy="GroupeDeCategories")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="titre_categorie_nv1", referencedColumnName="titre_categorie_nv1")
* })
*/
private $titreCategorieNv1;
/**
* @var \CategoriesNv2
*
* @ORM\ManyToOne(targetEntity="CategoriesNv2")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="titre_categorie_nv2", referencedColumnName="titre_categorie_nv2")
* })
*/
private $titreCategorieNv2;
/**
* @var \CategoriesNv3
*
* @ORM\ManyToOne(targetEntity="CategoriesNv3")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="titre_categorie_nv3", referencedColumnName="titre_categorie_nv3")
* })
*/
private $titreCategorieNv3;
/**
* @var \CategoriesNv4
*
* @ORM\ManyToOne(targetEntity="CategoriesNv4")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="titre_categorie_nv4", referencedColumnName="titre_categorie_nv4")
* })
*/
private $titreCategorieNv4;
/**
* @var \CategoriesNv5
*
* @ORM\ManyToOne(targetEntity="CategoriesNv5")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="titre_categorie_nv5", referencedColumnName="titre_categorie_nv5")
* })
*/
private $titreCategorieNv5;
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('YourBundle:Tutoriels')
->createQueryBuilder('T')
->join('T.idGroupeCategorie', 'GC')
-->select('COUNT(GC.titreCategorieNv1) AS CT1')
->where("T.tutorielControle = 'no'")
->groupBy('GC.titreCategorieNv1')
->getQuery();
$result = $query->getScalarResult(); //This will return an array of the counts
public function updateAction($type_update)
{
$request = Request::createFromGlobals();
$result = $request->isXmlHttpRequest();
if ($result === true) {
switch ($type_update) {
case "compteur_menu":
$em = $this->getDoctrine()->getManager();
$result = $em->createQuery("
SELECT TC.titreCategorieNv1, COUNT(TC.titreCategorieNv1) AS num
FROM Video2LearnBddBundle:Tutoriels T
INNER JOIN T.idGroupeCategorie GC
INNER JOIN GC.titreCategorieNv1 TC
WHERE T.tutorielControle='non'
GROUP BY TC.titreCategorieNv1"
)
->getResult();
$response = new Response();
$response->setStatusCode(Response::HTTP_OK);
$response->setContent(json_encode($result));
$response->headers->set('Content-Type', 'application/json');
return $response;
default:
break;
}
}
}