个性化阅读
专注于IT技术分析

如何在Symfony 4中使用Doctrine正确计算表中的所有行

在这篇简短的文章中, 我们将向你介绍如何使用Symfony 4中的Doctrine用主键计算一个表中有多少条记录。

计算表(存储库)中的所有行

在此示例中, 我们假设你的数据库中已经有表, 并且已经为它们创建了模型。在这里, 我们将使用Entity \ Articles.php文件中可用的Articles模型:

<?php

// src/Entity/Articles.php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Articles
 *
 * @ORM\Table(name="articles")
 * @ORM\Entity(repositoryClass="App\Repository\articlesRepository")
 */
class Articles
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="bigint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var string|null
     *
     * @ORM\Column(name="video", type="text", length=65535, nullable=true)
     */
    private $video;

    /**
     * @var string
     *
     * @ORM\Column(name="content", type="text", length=0, nullable=false)
     */
    private $content;
 

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    } 

    public function getContent(): ?string
    {
        return $this->content;
    }

    public function setContent(string $content): self
    {
        $this->content = $content;

        return $this;
    } 
}

该表包含一个主键, 其ID标识符为主键。在我们的控制器中, 我们将使用以下查询来计算表中有多少行:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

// Include class of the entity (table) that you want to query
use App\Entity\Articles; 

class AdminController extends AbstractController
{
    public function index()
    {  
        // 1. Obtain doctrine manager
        $em = $this->getDoctrine()->getManager();
        
        // 2. Setup repository of some entity
        $repoArticles = $em->getRepository(Articles::class);
        
        // 3. Query how many rows are there in the Articles table
        $totalArticles = $repoArticles->createQueryBuilder('a')
            // Filter by some parameter if you want
            // ->where('a.published = 1')
            ->select('count(a.id)')
            ->getQuery()
            ->getSingleScalarResult();
        
        // 4. Return a number as response
        // e.g 972
        return new Response($totalArticles);
    }
}

请注意, 我们并不是绝对调用表中的所有信息, 而只是调用将对ID字段进行计数的count指令。 getSingleScalarResult函数从dbms返回的结果中检索单个标量值。如果结果包含多个标量值, 则抛出异常。纯/混合区别不适用。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 4中使用Doctrine正确计算表中的所有行

评论 抢沙发

评论前必须登录!