问题是,我的用户的评分是通过 MtM 关系平均得出的,例如一个 User 有很多 Ratings 并且 Rating 实体字段值的平均值是用户的评分。
我想做的是找出一种方法,以某种方式将这些数据放入用户模型、虚拟字段或诸如此类的东西中。我设法为它创建了一个非映射属性和访问器方法,这样界面就很牢固,我的 View 看起来也不错。该属性显然没有映射到 Doctrine 中。
然后似乎我已经深入挖掘了每个 Doctrine 内部。我查看了 hydrators 和 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 插入 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];
}
关于php - 在 Doctrine 2 实体上映射额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779238/
我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。
我定义了一个方法:defmethod(one:1,two:2)[one,two]end当我这样调用它时:methodone:'one',three:'three'我得到:ArgumentError:unknownkeyword:three我不想从散列中一个一个地提取所需的键或排除额外的键。除了像这样定义方法之外,有没有办法规避这种行为:defmethod(one:1,two:2,**other)[one,two,other]end 最佳答案 如果不想写**other中的other,可以省略。defmethod(one:1,two:2
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我有以下模型用户has_many:users_contactshas_many:contacts,through::users_contactsaccepts_nested_attributes_for:contacts,allow_destroy:true联系方式has_many:users_contactshas_many:users,through::users_contactsaccepts_nested_attributes_for:users_contacts,allow_destroy:true用户联系belongs_to:usersbelongs_to:contacts
我有一个自定义表单生成器,使用此自定义生成器的原因之一是对于每个表单,我都需要包含一些额外的参数,我不想在每个表单中使用隐藏字段标签显式放入这些参数写。for_for(@foo,:builder=>MyBuilder)do|f|#stuffIshouldn'thavetoworryabout#thisshouldbeputinallthetimewithoutmehavingtodoithidden_field_tag('extra','myextrainfo')#normalthingsIwouldputinf.text_field(:bar)end我必须在我的自定义表单构建器中做什
我试图在我的一个HamlView中的If/Else语句中放置一些(未呈现的)注释,但它似乎会导致问题。我想要以下代码:-#Stufflike______activatestheifstatement-if@condition(Somecode)-#Stufflike_____activatestheelsestatement-else(Someothercode)不幸的是,Rails向我抛出这个错误:Got"else"withnopreceding"if"如果我删除“其他”注释,即-#Stufflike______activatestheifstatement-if@condition
在一个葡萄实体中,我只想在没有运气的情况下显示一个字段(不是零?)。我正在尝试这段代码,但根本没有按预期工作,但总是隐藏该字段。expose:winner,:using=>PlayerEntity,:unless=>{:winner=>nil}我认为代码本身解释了我真正需要的东西,但正如我所说,我没有得到预期的结果。有什么线索吗? 最佳答案 好的,检查grape-entity的代码我发现你需要将这个block作为RubyProc传递。此代码将按预期工作:expose:winner,:using=>PlayerEntity,:unle
在一个模块中,我有一个名为Process的类。moduleMProcess=Class.newProcess::wait(0)end这会引发NoMethodError。如何从模块内部访问顶级Process?如果不重命名我的类(class),这完全有可能吗? 最佳答案 ::Process.wait(0) 关于ruby-如何从定义相同名称的模块内部访问ruby中的顶级实体,我们在StackOverflow上找到一个类似的问题: https://stackoverf
当我想访问类Test中的常量CONST时classTestCONST=7end在课外,我必须这样做:putsTest::CONST为什么在执行此操作时会出现错误?putsobj::CONST如果obj是Test类的一个对象,为什么我尝试通过该对象访问常量时会出错? 最佳答案 因为实例对象和类对象不是一回事。命名空间存在于类对象上,不存在于实例上。但是,您可以向实例询问它的类,然后深入研究它。putsobj.class::CONST 关于ruby-访问类外的常量,我们在StackOverf
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?