在这篇简短的文章中, 我们将向你介绍如何使用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返回的结果中检索单个标量值。如果结果包含多个标量值, 则抛出异常。纯/混合区别不适用。
编码愉快!
评论前必须登录!
注册