我有一个相当复杂的排序函数,我需要使用它涉及几个连接和一些数学。因此,无法将其合并到标准DataMapper语法中(例如User.all(:order => ...)
)。目前我有类似
repository(:default).adapter.select('
SELECT users.id, ( (count(table1.*) - count(table2.*))/((EXTRACT(EPOCH FROM current_timestamp)) ) as sort FROM users
LEFT JOIN table1
ON table1.user_id = users.id
LEFT JOIN table2
ON ...
AND ...
GROUP BY users.id
ORDER BY sort DESC')
但是,我想将它集成到DataMapper中,以便我可以在任何datamapper集合上调用它
例如,User.all(:name => 'bob').crazy_sort_function
返回按我的特殊功能排序的名为'bob'的用户,或者User.all(:order => crazy_sort)
等等...
无论哪种配方都尽可能无缝地将其集成到数据映射器ORM中。
注意:由于current_timestamp是查询的一部分,因此我不能定期为所有行编译并适合列。