Symfony2-计数行/联接表

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 =

我是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 = "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;
        }
    }
}