Yii2:如何通过虚拟属性订购关系?

时间:2016-05-18 10:33:37

标签: yii2 virtual-attribute yii2-model yii-relations

我有一个班级Group,其中有很多Teams,我想根据他们的分数订购。团队的分数是通过迭代其游戏来计算的,因此分数不是db-field,它是一个虚拟的只读属性。

这是我的尝试:

public function getTeams()
{
    return $this->hasMany(Team::className(), ['group' => 'id'])->orderBy(['score' => SORT_ASC]);
}

这不起作用,因为得分不是db-field。如何通过虚拟属性订购关系?

1 个答案:

答案 0 :(得分:0)

您可以创建数据库视图,例如team_score。视图应包含团队表中的所有字段和计算的字段分数(使用SQL命令计算)。然后,您可以创建一个TeamScore模型,您可以通过现场分数轻松订购。

缺点:每次调用new计算的值都需要更多的计算能力,而不是计算值直接存储在表中。

优点:实现起来很简单,首先显示具有多种关系的表格,可以节省大量代码。