簡體   English   中英

具有嵌套關聯和組的Rails查詢(按關聯對象)

[英]Rails Query with nested association and group ( by associated object)

給定此模型關系:

orders.rb
belongs_to user

user.rb
belongs_to company

company.rb
has_many users

我想計算每個公司的所有訂單,所以我得到了:

Order.joins(user: :company)
.group(['companies.name, companies.id])
.count

結果是

[“公司1”,1] => 123

但是我不知道如何更改此查詢

<Company id: 1,name: "Jim Beam"> => 5

而不是公司屬性的數組。

通過向模型添加另一個關聯,可以使此過程更容易:

# company.rb
has_many :users
has_many :orders, through: :users

然后,您可以執行以下操作:

   companies = Company.
               joins(:orders).
               group("company.id").
               select("company.id, company.name, count(orders.id) as orders_count")

如果您接着說companies.first您將看到類似以下內容:

#<Company:0x005610fa35e678 id: 15 name: 'foo'>

它看起來好像不存在orders_count 但實際上它已經被加載了。 您可以這樣實現:

companies.first.orders_count

如果將公司轉換為哈希,也可以看到它:

companies.first.attributes # => { id: 15, orders_count: 2, name: "foo" }

至少在Postgres中,如果要在屬性哈希中獲取更多數據,則必須分別指定select字符串中的每一列。 我不確定其他數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM