如何使用Sequel Ruby gem从热切的图关联中热切加载关联



我的应用程序中有以下模型:

class Order < Sequel::Model
many_to_one(:client, class: 'Client', key: :client_id)
end
class Client < Sequel::Model
one_to_many(:images, class: 'Image', key: :client_id, eager: :file)
end
class Image < Sequel::Model
many_to_one(:file, class: 'File', key: :file_id, eager: :namespace)
end
class File < Sequel::Model
many_to_one(:namespace, class: 'Namespace', key: :namespace_id)
end
class Namespace < Sequel::Model
end

我可以使用eager_graph(因为搜索列在client表中,所以eager_gaph(为具有account_id=1的所有Clients获取所有Orders

orders = Order.eager_graph(:client).where(account_id: 1)

急于加载所有这些实体的最佳策略是什么?如果我将其更改为.eager_graph(client: :images),结果将是一个包含大量联接的大查询。

是否可以对每个嵌套的关联都有一个单独的查询,就像只使用.eager方法一样?

由于性能问题,我试图对此进行微调
提前谢谢。

Sequel目前不支持以这种方式混合eager和eager_graph。你可以做:

Order.eager(:client=>{proc{|ds| ds.where(:account_id=>1)}=>:images}).all.
select{|order| order.client}

但如果大多数订单都没有客户,那么这可能不是很有效。你可能会做得更好:

clients = Client.where(:account_id=>1).eager(:orders, :images)
clients.flat_map(&:orders)

最新更新