sails.js作为单向关联创建的一对一关联

时间:2014-12-04 01:06:50

标签: model associations sails.js waterline

我注意到我在帖子上得到的回复和我得到的回复不一样。特别是,协会。

引用'与其他新记录关联时创建新记录' https://github.com/balderdashy/sails-docs/blob/master/reference/blueprint-api/Create.md

我使用sails new testProj,然后sails generate api ponysails generate api pet从文档中重新创建方案,然后将模型更新为具有一对一关联。

小马

module.exports = {
    attributes: {
        pet: {
            model: 'pet'
        }
    }
};

小马

module.exports = {
    attributes: {
        pet: {
            model: 'pet'
        }
    }
};

宠物

module.exports = {
    attributes: {
        pony: {
            model: 'pony'
        }
    }
};

然后,sails lift离开。

POST /pony

JSON Req

{
  "name": "Pinkie Pie",
  "hobby": "ice skating",
  "pet": {
    "name": "Gummy",
    "species": "crocodile"
  }
}

JSON Res

{
  "name": "Pinkie Pie",
  "hobby": "ice skating",
  "pet": 1,
  "createdAt": "2014-11-21T19:18:09.161Z",
  "updatedAt": "2014-11-21T19:18:09.161Z",
  "id": 1
}

正如您所看到的,res ponse不包含完整的宠物对象,只包括它的id。在文档中,它显示了返回的完整对象。

条目和关联肯定是成功创建的,

GET - /pony/1

{
  "pet": {
    "name": "Gummy",
    "species": "crocodile",
    "createdAt": "2014-11-21T19:18:09.157Z",
    "updatedAt": "2014-11-21T19:18:09.157Z",
    "id": 1
  },
  "name": "Pinkie Pie",
  "hobby": "ice skating",
  "createdAt": "2014-11-21T19:18:09.161Z",
  "updatedAt": "2014-11-21T19:18:09.161Z",
  "id": 1
}

这是文档中的错误还是代码中的错误?无论哪种方式,我们是否可以指定我们希望返回关联?

一对一关联只是作为链接ID出现,很多人根本没有出现。当我看到toObject()选项时,我正在查看waterline showJoins函数的另一个问题。看起来它可能与此有关。

此外,这种一对一关联实际上只是作为单向关联创建的。

完成上述操作后:

GET - /pet/1

{
  "name": "Gummy",
  "species": "crocodile",
  "createdAt": "2014-12-03T20:50:31.346Z",
  "updatedAt": "2014-12-03T20:50:31.346Z",
  "id": 1
}

请注意,不会返回任何小马。

只是为了确保......

GET - /pony/1/pet

{
  "name": "Gummy",
  "species": "crocodile",
  "createdAt": "2014-12-03T20:50:31.346Z",
  "updatedAt": "2014-12-03T20:50:31.346Z",
  "id": 1
}

GET - /pet/1/pony

Res

Specified record (1) is missing relation 'pony'

小马有一只宠物,宠物没有小马。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要在定义双向关系时提供via属性,否则它们将被假定为不相关的单向连接。

小马

module.exports = {
    attributes: {
        pet: {
            model: 'pet',
            via: 'pony'
        }
    }
};

宠物

module.exports = {
    attributes: {
        pony: {
            model: 'pony',
            via: 'pet'
        }
    }
};

仅在many-manyone-many关系的文档中提到过,这可能是一个错误。