我有一个班级Group
,其中有很多Teams
,我想根据他们的分数订购。团队的分数是通过迭代其游戏来计算的,因此分数不是db-field,它是一个虚拟的只读属性。
这是我的尝试:
public function getTeams()
{
return $this->hasMany(Team::className(), ['group' => 'id'])->orderBy(['score' => SORT_ASC]);
}
这不起作用,因为得分不是db-field。如何通过虚拟属性订购关系?
答案 0 :(得分:0)
您可以创建数据库视图,例如team_score。视图应包含团队表中的所有字段和计算的字段分数(使用SQL命令计算)。然后,您可以创建一个TeamScore模型,您可以通过现场分数轻松订购。
缺点:每次调用new计算的值都需要更多的计算能力,而不是计算值直接存储在表中。
优点:实现起来很简单,首先显示具有多种关系的表格,可以节省大量代码。