资讯专栏INFORMATION COLUMN

orm2 中文文档 4.1 hasOne(多对一关系)

Pink / 3104人阅读

摘要:译者飞龙来源关联是一种多对一的关系,意思是你定义的模型可以有多个实例指向一个其它的实例所属相同模型或不同模型。如果关联并不是必须的,则可以为空。这个关联也会创建一些额外的便利方法叫做关联访问器来帮助你管理它。

译者:飞龙

来源:hasOne

hasOne关联是一种多对一的关系,意思是你定义的模型可以有多个实例指向一个其它的实例(所属相同模型或不同模型)。

用法
Animal.hasOne(association_name [, association_model [, options ] ]);
描述

association_name是两个模型之间的关系名称‘

association_model是要关联的另一个模型(如果没有定义,假设为同一个模型,大多数情况下这可能不是你想要的);

options是一个对象,拥有一些和关联有关的,你可以调整的属性,比如自动获取,再比如表(SQL中)或者集合(MongoDB中)的名称。

示例
Animal.hasOne("owner", Person);

在背后,这条语句意思是Animal集合拥有一个属性owner_id(这个名称可以通过选项来修改,{field: "ownerid"}),它会指向Person集合的某个人。如果关联并不是必须的,则可以为空。

这个关联也会创建一些额外的便利方法(叫做关联访问器)来帮助你管理它。访问器的名称也可以修改(同上,在选项里面),默认情况下,它们会拥有和关联名称相似的名称。例如,下面的代码展示了可以做类似这样的事情:

// assuming John is a Person..
Animal.find({ name: "Deco" }).first(function (err, Deco) {
    Deco.setOwner(John, function (err) {
        // John is now the owner of Deco
    });
});

其它的访问器:

getOwner(callback) - 获取关联的所有者

hasOwner(callback) - (在回调中)返回这个动物是否拥有所有者

removeOwner(callback) - 移除和所有者的关联关系(如果存在的话)

关联反转

有时你希望通过对面的模型来访问关联。在上面的例子中,是通过Person。你可以向关联传递一个选项来实现它。

Animal.hasOne("owner", Person, { reverse: "pets" });

之后,每个person实例都有有两个便利方法:

getPets(callback) - 获取所有和这个人有关联的动物

setPets(cat, dog, callback) - 移除所有和这个人有关联的动物,并且添加猫和狗

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17504.html

相关文章

  • orm2 中文文档 4. 定义关联

    摘要:译者飞龙来源关联是一个或多个模型之间的关系。关联的类型一对多多对多一对一 译者:飞龙 来源:Defining Associations 关联是一个或多个模型之间的关系。 关联的类型: hasOne(一对多) hasMany(多对多) extendsTo(一对一)

    URLOS 评论0 收藏0
  • Sequelizejs 关联

    摘要:看似一对一其实一对多这里的指的应该是查询数据主表结果中关联信息是以单个形式作为一个属性挂在主表每一个对象中实际上是主表与关联表的多对一关系拿中的和中的进行关联配置的别名配置中的外键字段名称,默认为配置中的目标键字段名称,默认为主键查 One-To-One 看似一对一,其实一对多.这里的 One-To-One 指的应该是查询数据(主表)结果中,关联信息是以单个形式作为一个属性挂在主表每一...

    Thanatos 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<