[英]Extending a Doctrine entity to add extra association mapping in Symfony2
[英]Mapping extra rows on a Doctrine 2 entity
问题是,我的用户具有通过MtM关系平均的Rating
,例如, User
具有许多Ratings
并且Rating
实体字段值的平均值是用户的评级。
我想要做的是找出一种方法以某种方式将这些数据放入用户模型,虚拟领域或诸如此类的东西。 我已经设法为它创建了一个非映射属性和访问器方法,因此界面是可靠的,我的视图看起来很好。 该属性显然没有映射到Doctrine中。
然后好像我已经挖掘了每一个学说内部。 我查看了水印器和ResultSetMappings,但似乎没有好办法将计算字段推入实体字段。
所以,这就是我设法提出的。
这是我加入并选择额外字段的地方:
$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')
;
我需要得到的是Doctrine以某种方式将people_rating
推people_rating
User
实体。 现在我得到一个看起来像这样丑陋的数组:
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)...
}
}
我很确定有一种方法可以实现一个可以执行此操作的ResultSetMapping
,但是如何实现?
一个丑陋的解决方案看起来像这样:
foreach ($usersDirty as $user) {
$user[0]->setPeopleRating($user['peopleRating']);
$users []= $user[0];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.