1

我有一堂课Group,里面有很多Teams,我想按他们的分数来排序。一个团队的分数是通过迭代其游戏来计算的,因此score不是一个 db-field,它是一个虚拟的只读属性。

这是我的尝试:

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

这不起作用,因为分数 不是数据库字段。如何按虚拟属性排序关系?

4

1 回答 1

0

您可以创建一个数据库视图,例如 team_score。该视图应包含团队表中的所有字段和计算的字段分数(使用 SQL 命令计算)。然后您可以创建一个模型 TeamScore,您可以很容易地按字段分数对其进行排序。

缺点:每次调用视图都会重新计算值,比直接存储在表中的计算值需要更多的计算能力。

优点:实现简单,首先用于显示具有许多关系的表格,它节省了大量的编码。

于 2016-05-19T07:49:15.317 回答