如何从 doctrine/php 中的实体属性中的不同 table 聚合信息?
How to aggregate information from a different table in an entity attribute in doctrine/php?
我正在使用 PHP Symfony 5.2 和 doctrine-orm。我有以下实体:
Question
--------
id
questionText
Answer
------
id
answerText
questionId
GivenAnswer
-----------
id
answerId
用户访问我的网站并可以回答问题。每个问题有两到四个答案。发送答案后,它们将保存在 table GivenAnswer 中,其中每个答案都会创建一个带有 answerId 的新行。
现在我想在 PHP 中的 Answer 实体中添加一个字段,我将其称为 givenTotal。我想像这样访问给定答案的数量:
echo "Answer given " . $answer->givenTotal() . " times";
我知道如何使用 SQL 请求此信息,但我不想遍历所有带有答案对象的问题以将该信息加载到属性中。有没有办法对其进行编码,使 doctrine-orm 将 givenAnswer 计数加载到该属性中?
Doctrine 有一个功能叫做 "extra lazy" association。在额外的惰性关联上 count()
发出计数查询并且不会完全加载所有关联实体。
只需将该标志添加到您从 Answer
到 GivenAnswer
的关系中:
/**
* @Entity
*/
Class Answer
{
/**
* @ManyToMany(targetEntity="GivenAnswer", mappedBy="answer", fetch="EXTRA_LAZY")
*/
public $givenAnswers;
public function getGivenAnswers() :ArrayCollection
{
return $this->givenAnswers;
}
}
然后使用 $answer->getGivenAnswers()->count()
获取任何答案的计数
我正在使用 PHP Symfony 5.2 和 doctrine-orm。我有以下实体:
Question
--------
id
questionText
Answer
------
id
answerText
questionId
GivenAnswer
-----------
id
answerId
用户访问我的网站并可以回答问题。每个问题有两到四个答案。发送答案后,它们将保存在 table GivenAnswer 中,其中每个答案都会创建一个带有 answerId 的新行。
现在我想在 PHP 中的 Answer 实体中添加一个字段,我将其称为 givenTotal。我想像这样访问给定答案的数量:
echo "Answer given " . $answer->givenTotal() . " times";
我知道如何使用 SQL 请求此信息,但我不想遍历所有带有答案对象的问题以将该信息加载到属性中。有没有办法对其进行编码,使 doctrine-orm 将 givenAnswer 计数加载到该属性中?
Doctrine 有一个功能叫做 "extra lazy" association。在额外的惰性关联上 count()
发出计数查询并且不会完全加载所有关联实体。
只需将该标志添加到您从 Answer
到 GivenAnswer
的关系中:
/**
* @Entity
*/
Class Answer
{
/**
* @ManyToMany(targetEntity="GivenAnswer", mappedBy="answer", fetch="EXTRA_LAZY")
*/
public $givenAnswers;
public function getGivenAnswers() :ArrayCollection
{
return $this->givenAnswers;
}
}
然后使用 $answer->getGivenAnswers()->count()