【发布时间】:2019-12-01 00:28:40
【问题描述】:
我有一个问题,我一直在转动我的轮子一段时间。我有一个非常复杂的(可能不正确 - 或者说是最有效的)数据结构,我正试图通过逻辑来解决这个问题。
我想知道如何对单个查询的第二个关系函数执行查询 (orderBy)。我什至不确定这是否是描述它的正确方式,所以这是我的代码:
$players = $team->players()
->wherePivot('year_id', $year->id)
->with(['stats' => function ($query) {
$query->orderBy('score', 'desc');
}])
->get();
看起来应该很简单,但是orderBy 子句不起作用。否则查询有效(返回玩家及其统计数据)。以下是我的人际关系的建立方式:
Team -> belongsToMany Player (and vice versa)
Player -> belongsToMany Stat (and vice versa)
在这种情况下,我的每个数据透视表都有一个额外的键,除了两个指定的表之外,它们还有一个year_id。这是因为这种关系只与特定年份相关,我认为这可能是让事情变得更加复杂的原因。例如,我的team_player 表如下所示:
team_id
player_id
year_id
我的player_stat 表如下所示:
player_id
stat_id
year_id
我不确定这是否是实现我想要的最有效或最好的方法,但在构建时它是有意义的。那么我怎样才能通过这个架构来使这个查询工作呢?此外,任何关于数据结构可能会更好地工作的反馈也将不胜感激。
【问题讨论】:
标签: laravel eloquent logic relationship