相关表有别名时如何按关系排序

Posted

技术标签:

【中文标题】相关表有别名时如何按关系排序【英文标题】:How to order by relationship when the related table has an alias 【发布时间】:2021-12-25 03:15:05 【问题描述】:

我们有一个名为Client 的表,客户端以两种方式属于用户,client 可以拥有updatercreator。它也属于company

belongs_to :creator, class_name: 'User'
belongs_to :updater, class_name: 'User' 

我正在尝试获取它们所属的当前父对象 company 的所有客户端,然后按其 creator 名称的字母顺序对它们进行排序

这是我目前尝试过的

current_company.clients.includes(:creator).order("creator.name #sort_dir")

如果我将 :user 放入包含中,则会引发用户不在桌面上的错误。

Association named 'user' was not found on Client; 

这是我在网上找到的最接近的。

【问题讨论】:

current_company.clients.includes(:creator).order("users.name #sort_dir") 工作吗? 是的,看来确实如此,如果你做出这个答案,我很乐意接受它来给你荣誉,因为你为我节省了大量时间。 【参考方案1】:

查看查询的最简单方法是调用.to_sql

您会看到,在执行join 时,它使用表名users,而不是关系名creator

这应该可行:

current_company.clients.includes(:creator).order("users.name #sort_dir")

【讨论】:

感谢您的解释,我相信我会在某个时候回来讨论这个问题。再次感谢 不客气!

以上是关于相关表有别名时如何按关系排序的主要内容,如果未能解决你的问题,请参考以下文章

按 sqlalchemy 中的连接别名排序

根据对多关系中相关对象的计数对获取请求进行排序

Sonata Admin Bundle:按计数一对多关系排序

Laravel按hasmany关系排序

如果一个表有一个未索引列与索引列是一对多的关系,如何优化未索引列的查询?

如何“按...排序”使用Builder的雄辩关系