Yii2:如何按虚拟属性排序关系?
Yii2: How to order a relation by virtual attribute?
我有一个 class Group
,其中有许多 Teams
,我想按分数排序。一个团队的得分是通过迭代其比赛来计算的,因此 score 不是数据库字段,它是一个虚拟的只读属性。
这是我的尝试:
public function getTeams()
{
return $this->hasMany(Team::className(), ['group' => 'id'])->orderBy(['score' => SORT_ASC]);
}
这不起作用,因为 score 不是数据库字段。如何通过虚拟属性对关系进行排序?
您可以创建数据库视图,例如team_score。该视图应包含团队 table 的所有字段和计算的字段分数(使用 SQL 命令计算)。然后你可以创建一个模型 TeamScore,你可以很容易地按字段分数排序。
缺点:这些值将通过每次调用新视图计算,与计算值直接存储在 table 中相比,需要更多的计算能力。
优点:实现简单,首先显示table有很多关系,节省了大量编码。
我有一个 class Group
,其中有许多 Teams
,我想按分数排序。一个团队的得分是通过迭代其比赛来计算的,因此 score 不是数据库字段,它是一个虚拟的只读属性。
这是我的尝试:
public function getTeams()
{
return $this->hasMany(Team::className(), ['group' => 'id'])->orderBy(['score' => SORT_ASC]);
}
这不起作用,因为 score 不是数据库字段。如何通过虚拟属性对关系进行排序?
您可以创建数据库视图,例如team_score。该视图应包含团队 table 的所有字段和计算的字段分数(使用 SQL 命令计算)。然后你可以创建一个模型 TeamScore,你可以很容易地按字段分数排序。
缺点:这些值将通过每次调用新视图计算,与计算值直接存储在 table 中相比,需要更多的计算能力。
优点:实现简单,首先显示table有很多关系,节省了大量编码。