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

在这篇简短的文章中, 我们将向你介绍如何使用Symfony 4中的Doctrine用主键计算一个表中有多少条记录。
计算表(存储库)中的所有行在此示例中, 我们假设你的数据库中已经有表, 并且已经为它们创建了模型。在这里, 我们将使用Entity \ Articles.php文件中可用的Articles模型:

< ?php// src/Entity/Articles.phpnamespace 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标识符为主键。在我们的控制器中, 我们将使用以下查询来计算表中有多少行:
< ?phpnamespace 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 queryuse 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 972return new Response($totalArticles); }}

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

    推荐阅读