【问题标题】:How to do multiple joins in Sequel ORM for Ruby如何在 Sequel ORM for Ruby 中进行多个连接
【发布时间】:2016-07-26 01:49:11
【问题描述】:

我正在使用 Sequel ORM。我有三个表,'类别','商家','产品'。

以下是模型:

class Product < Sequel::Model
    many_to_one :merchants
end

class Merchant < Sequel::Model
    many_to_one :category
end

我需要获取特定类别的产品。我该怎么做?

如果我需要特定商家的产品,我可以轻松做到:

@merchant = Merchant.first(:id=>1)
@merchant.products.each do |s|
...
end

但是当类别与商家相关并且商家与产品表相关时,我如何获取类别中的产品?

【问题讨论】:

    标签: sql ruby sequel


    【解决方案1】:

    这是一种方法:

    Product.
      select_all(:products).
      association_join(:merchant).
      where(:category_id=>category.id)
    

    但是添加关联可能是最简单的:

    Category.many_to_many :products,
      :join_table=>:merchants,
      :right_key=>:id,
      :right_primary_key=>:merchant_id
    
    category.products
    

    【讨论】:

      【解决方案2】:

      获取一个类别,遍历属于该类别的商家,并将该商家的产品推送/追加到一个数组中:

      products = []
      category = Category.find(:id=>1)
      category.merchants.each do |m|
        p<<m.products
      end
      

      【讨论】:

      • 我认为它需要再次迭代 m.products,例如 m.products.each do |m|... end。有没有办法让 JOIN 获得类似的结果?
      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2021-01-17
      • 2018-01-10
      相关资源
      最近更新 更多