php - 如何在学说/php中的实体属性中聚合来自不同表的信息?
问题描述
我正在使用 PHP Symfony 5.2 和教义-orm。我有以下实体:
Question
--------
id
questionText
Answer
------
id
answerText
questionId
GivenAnswer
-----------
id
answerId
用户访问我的网站并可以回答问题。每个问题有两到四个答案。发送答案后,它们会保存在 GivenAnswer 表中,其中每个答案都会创建一个带有 answerId 的新行。
现在我想在 PHP 中的 Answer 实体中添加一个附加字段,我将其称为 givenTotal。在那里我想访问给定答案的数量,如下所示:
echo "Answer given " . $answer->givenTotal() . " times";
我知道如何使用 SQL 请求此信息,但我不想使用答案对象循环所有问题以将该信息加载到属性中。有没有办法对其进行编码,使教义-orm 将 givenAnswer 计数加载到此属性中?
解决方案
Doctrine 有一个特性叫做“额外懒惰”的关联。在额外的惰性关联上,会count()
发出一个计数查询,并且不会完全加载所有关联的实体。
只需将该标志添加到您的关系 from Answer
to GivenAnswer
:
/**
* @Entity
*/
Class Answer
{
/**
* @ManyToMany(targetEntity="GivenAnswer", mappedBy="answer", fetch="EXTRA_LAZY")
*/
public $givenAnswers;
public function getGivenAnswers() :ArrayCollection
{
return $this->givenAnswers;
}
}
然后获取以计算任何答案$answer->getGivenAnswers()->count()
推荐阅读
- python - 从python中的列表中提取特定的字符串/单词
- javascript - Keycloak Script 基本身份验证器在失败时出现相同的错误消息
- python - Python - 在 FTP 中按块上传内存文件(由 API 调用生成)
- c++ - 将 shared_ptr 与 FreeRTOS 队列一起使用
- excel - 多个条件范围内条件的多个 Sum 范围求和
- cucumber - 黄瓜水豚中的换行符
- raspberry-pi - pi-zero usb otg 端口在引导期间被识别为未知设备
- excel - MDX Excel 中的 IIF + 过滤器 + inst 函数
- ios - 具有 Swift 4 依赖项的 Swift 3 Cocoapod
- symfony - Doctrine 2 实体关系:级联合并