2012-07-09 25 views
17

我正在考慮爲即將開展的項目使用node.js工具,以便學習和提高性能。 For example,一些車型的Rails:什麼是Node.js世界中的ActiveRecord等價?

class User 
    has_many :topics 
    has_many :friends 
    has_many :friend_users, :through => :friends 
    has_many :friend_topics, :through => :friend_users, :source => :topics  
end 

class Friend 
    belongs_to :user 
    belongs_to :friend_user, :class_name => "User", 
     :foreign_key => :phone_no, :primary_key => :phone_no 
end 

class Topic 
    belongs_to :user 
end 

讓優雅的查詢代碼,如:

latest_10_topics_from_friends = current_user.friend_topics.limit(10) 

,並生成優化的SQL。 node.js生態系統中是否有類似的東西?

+0

您正在使用什麼數據庫? – 2012-07-09 16:21:09

+0

最有可能是mysql或postgre。 – ohho 2012-07-10 02:42:33

+0

查看http://sailsjs.org – 2015-04-07 18:51:04

回答

12

更新答案

使用sequelize


老答案:

看項目Tower。您可以按如下定義你的模型:

# app/models/user.coffee 
class App.User extends Tower.Model 
    @belongsTo "author", type: "User" 
    @belongsTo "commentable", polymorphic: true 
    @has_many "topics" 
    @has_many "friends" 
    @has_many "friend_users", through: "friends" 
    @has_many "friend_topics", through: "friends_users", source: "topics" 

# app/models/friend.coffee 
class App.Friend extends Tower.Model 
    @belongs_to "user" 
    @belongs_to "friend_user", type: "User", 
       foreign_key: "phone_no", primary_key: "phone_no" 

# app/models/topic.coffee 
class App.Topic extends Tower.Model 
    @belongs_to "user" 

現在,您將能夠查詢您的數據

current_user.friend_topics().limit(10) 
+3

對於任何閱讀此截至2015年,塔現在根據他們的文件沒有維護,沒有1-2年的新提交。繼續看... – am17torres 2015-03-27 05:16:21

+0

謝謝@ cr1ms0n3cho – 2015-04-02 13:57:09

+0

是啊,塔是完全死了。建議更新答案。 – 2015-04-05 22:33:13

4

如果您使用MySql,您可以嘗試Sequelize.js。 很難達到那個ActiveRecord的提供的功能數量,但儘管如此,我一直在Sequelize和它的一個很好的解決方案工作的Node.js

還有其他DB其他幾個ORM解決方案,您可以在這裏檢查他們http://search.npmjs.org/

11

水線,似乎是你正在尋找的東西。它是由Sails項目背後的同一個人創建的。

https://github.com/balderdashy/waterline

+0

我有一個簡單的問題:有沒有一種方法讓水線在沒有定義模型屬性的情況下工作?喜歡它可能在這裏:https://github.com/3kg4kR/active_record – davidhq 2015-03-14 10:20:39

+0

水線不能正確支持多對多的關係,更不用說「通過」關係。 – 2015-03-26 08:00:29

+1

@morbaq Waterline實際上對多對多關係有100%的支持。 – 2015-04-05 22:33:48

-6

mongoose可能是最接近的比喻,雖然它是一個文檔存儲不是一個關係數據庫一樣導軌/活動記錄

+0

爲什麼這麼多downvotes?這是一種拖釣嗎? – 2017-09-29 07:45:12

相關問題