草庐IT

javascript - 建立关联时,哪些方法/mixin sequelize 添加到模型中?

coder 2025-01-28 原文

同时通过sequelize docs ,更具体地说是 documentations about associations ,我看到指南随便给了读者方法如setTasks() , addTask() , setProject() ,这似乎是由 sequelize 自动为所有与创建的关联相关的模型实例创建的。

我找不到有关哪些方法可用的详细信息,以及它们是使用单数版本还是复数版本创建的(例如,因为有 setTasks()setProject() ),以及他们期望的参数究竟是什么,诸如此类。 The docs显然只是在例子中随便提到它们......

那么,当建立关联时,哪些方法/mixins sequelize 添加到模型中? 参数和返回值是什么,即这些方法的文档是什么?或者,至少,我在哪里可以找到它们?

最佳答案

The documentation about associations you linked ,尽管托管在名为 docs.sequelize.js 的地址中,但不是 真正的 Sequelize 文档 (如在包含良好文档通常提供的所有详细信息的完整文档中)。这更像是初学者的教程/指南。

real sequelize docs 通过单击您提到的链接的侧边菜单中可用的“引用”链接找到(我花了很长时间才找到它 - 它甚至看起来不像 IMO 可点击的东西)。

您在这里感兴趣的部分是这些:

  • 的 Sequelize 文档属于关联类型:here
  • 的 Sequelize 文档BelongsToMany 关联类型:here
  • 的 Sequelize 文档HasMany 关联类型:here
  • 的 Sequelize 文档HasOne 关联类型:here


  • 了解文档

    由于上面链接的文档可能非常困惑,这里有一个解释来帮助您理解文档。

    例如,让我们假设我们在 Person 之间有一个属于多个关联。和 Hypothesis .注意它们的复数形式,PeopleHypotheses , 由 Sequelize 自动推断。这个魔法是由名为 inflection 的很棒的库在幕后完成的。 - 见 How do plurals work in Sequelize?更多细节。
    // Assuming that the models Person, Hypothesis and Person_Hypothesis are already defined
    Person.belongsToMany(Hypothesis, { through: Person_Hypothesis });
    Hypothesis.belongsToMany(Person, { through: Person_Hypothesis });
    

    我们想使用 Sequelize docs for BelongsToMany type of associations了解哪些方法被自动添加到 Person 和 Hypothesis 模型的实例中。在那里,我们可以找到下表:



    要理解此表的含义,请回想一下在该文档页面的开头,它说“在下面的 API 引用中,将关联的名称添加到方法中”。其中最令人困惑的部分是不清楚何时应该添加名称的单数形式以及何时应该添加复数形式。但是,尽管文档没有明确说明这一点,但我向您保证,您可以仅凭常识进行猜测。如果您认为这两个版本都有意义(例如,对于 add ),请惊讶于实际上两个版本都可用。因此,从上表中,我们可以得出结论:
  • 添加到 Person 模型实例的方法:
  • addHypothesis()
  • addHypotheses()
  • countHypotheses()
  • createHypothesis()
  • getHypotheses()
  • hasHypothesis()
  • hasHypotheses()
  • removeHypothesis()
  • removeHypotheses()
  • setHypotheses()
  • 添加到假设模型实例的方法:
  • addPerson()
  • addPeople()
  • countPeople()
  • createPerson()
  • getPeople()
  • hasPerson()
  • hasPeople()
  • removePerson()
  • removePeople()
  • setPeople()

  • 另一种毫无疑问地解决这个问题的方法是检查 Sequelize 源代码本身,即 here ,我们可以在这里找到:
    this.accessors = {
        get: 'get' + plural,
        set: 'set' + plural,
        addMultiple: 'add' + plural,
        add: 'add' + singular,
        create: 'create' + singular,
        remove: 'remove' + singular,
        removeMultiple: 'remove' + plural,
        hasSingle: 'has' + singular,
        hasAll: 'has' + plural,
        count: 'count' + plural
    };
    

    注意:虽然这可能看起来违反直觉,但实际上这两种方法 addPerson()addPeople()上面提到的使用相同的参数,可以是单个值或数组。换句话说,方法 addaddMultiple从源码来看其实都是一样的,到底。这同样适用于 remove()removeMultiple() , 和 hasSingle()hasAll() .

    希望通过这个,您现在可以理解 Sequelize 文档对这些表格的真正含义。

    如果您喜欢直接检查源代码,类似于我上面显示的内容,这些是其他类型关联的相关行:
  • 属于 :here
    this.accessors = {
        get: 'get' + singular,
        set: 'set' + singular,
        create: 'create' + singular
    };
    
  • HasOne :here
    this.accessors = {
        get: 'get' + singular,
        set: 'set' + singular,
        create: 'create' + singular
    };
    
  • HasMany :here
    this.accessors = {
        get: 'get' + plural,
        set: 'set' + plural,
        addMultiple: 'add' + plural,
        add: 'add' + singular,
        create: 'create' + singular,
        remove: 'remove' + singular,
        removeMultiple: 'remove' + plural,
        hasSingle: 'has' + singular,
        hasAll: 'has' + plural,
        count: 'count' + plural
    };
    
  • 关于javascript - 建立关联时,哪些方法/mixin sequelize 添加到模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49467654/

    有关javascript - 建立关联时,哪些方法/mixin sequelize 添加到模型中?的更多相关文章

    1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

      我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

    2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

      总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

    3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

      类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

    4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

      我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

    5. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

      当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

    6. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

      我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

    7. Ruby 方法() 方法 - 2

      我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

    8. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

      我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

    9. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

      我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

    10. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

      我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

    随机推荐