Php 映射条令2实体上的额外行
问题是,我的用户的评分是通过MtM关系平均的,例如Php 映射条令2实体上的额外行,php,symfony,orm,doctrine-orm,Php,Symfony,Orm,Doctrine Orm,问题是,我的用户的评分是通过MtM关系平均的,例如用户有许多评分,而评分实体字段值的平均值就是用户的评分 我想做的是找出一种方法,以某种方式将这些数据放入用户模型、虚拟字段或诸如此类的内容中。我已经设法为它创建了一个非映射属性和访问器方法,这样接口就很坚固,视图也很好看。该属性显然没有在学说中映射 然后好像我已经挖掘了所有的内部学说。我已经查看了水合器和结果映射,但似乎没有好的方法将计算字段推入实体字段 这就是我想出来的 这是我加入并选择额外字段的位置: $qb->select('u')
用户
有许多评分
,而评分
实体字段值的平均值就是用户的评分
我想做的是找出一种方法,以某种方式将这些数据放入用户模型、虚拟字段或诸如此类的内容中。我已经设法为它创建了一个非映射属性和访问器方法,这样接口就很坚固,视图也很好看。该属性显然没有在学说中映射
然后好像我已经挖掘了所有的内部学说。我已经查看了水合器和结果映射,但似乎没有好的方法将计算字段推入实体字段
这就是我想出来的
这是我加入并选择额外字段的位置:
$qb->select('u')
->addSelect('AVG(r.rating) AS people_rating')
->from('MyMainBundle:User', 'us')
->leftJoin('u.reviews', 'r', Expr\Join::WITH, 'r.user = u')
->where('u.id = :id')
->orderBy('people_rating', 'DESC')
;
我需要得到的是将人员评级
推到用户
实体中。现在我得到一个丑陋的数组,看起来像这样:
array(1) {
[0] =>
array(2) {
[0] =>
class My\MainBundle\Entity\User#868 (46) {
protected $id =>
int(247)
protected $email =>
string(28) "june68@goldneroconner.com.lc"
private $createdAt =>
class DateTime#973 (3) (...)
private $firstName =>
string(8) "John"
(more elements)...
}
'people_rating' =>
NULL
}
}
以下是我真正需要的:
array(1) {
[0] =>
class My\MainBundle\Entity\User#868 (46) {
protected $id =>
int(247)
protected $email =>
string(28) "june68@goldneroconner.com.lc"
private $createdAt =>
class DateTime#973 (3) (...)
private $firstName =>
string(8) "John"
private $peopleRating => (...)
(my float calculated within MySQL's AVG())
(more elements)...
}
}
我很确定有一种方法可以实现
结果映射
,但是如何实现呢?一个难看的解决方法会是这样的:
foreach ($usersDirty as $user) {
$user[0]->setPeopleRating($user['peopleRating']);
$users []= $user[0];
}