了解地带关系如何运作

Aye*_*azo 8 javascript mongodb node.js strapi

我是stradi的新手,并且通常是在后端开发方面,我试图了解很小的事情应该如何工作。

我有一个用户模型,一个个人资料模型和一个票价模型。

用户可以拥有个人资料,因此我创建了一个关系has and belongs to one。个人资料可以包含票价,而我在个人资料和票价之间创建了相同的关系。

我在这里注意到的是:

在客户端中,我进入个人资料部分时,会使用所有属性(例如名称,姓氏,地址等)进行保存,并且通过向其中添加用户ID一切正常。

这里的要点是,在同一个人资料部分中,我也有票价输入,我想做的是通过保存个人资料而不是仅为票价添加特殊的保存按钮来保存票价...

在这里有可能要做的事情还是我做错了什么?

我正在按配置文件划分票价,以便能够更好地查找,组织和使用票价,而不必每次都查询配置文件,而是通过id ro拥有配置文件记录...

有人可以清楚地解释最佳方法吗?我应该怎么做才能正确实现它?谢谢

Fab*_*lio 5

Form

HTML 输入创建嵌套的 json 数据 您可以构建一个表单并测试输出

<form action="profiles" method="POST" accept-charset="utf-8">
  <input type="text" name="name" value="MyProfileName" />
  <input type="text" name="fare[name]" value="MyProfileFareName" />
</form>
Run Code Online (Sandbox Code Playgroud)

解析 parameters

参数将从您的后端接收为

name=MyProfileName&fare[name]=MyProfileFareName
Run Code Online (Sandbox Code Playgroud)

控制器会将上述参数解析为 json

{
  'profile' => {
    'name' => 'MyProfileName',
    'fare' => {
        'name' => 'MyProfileFareName',
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

控制器createupdate动作

控制器应负责使用接收到的参数并更新数据库模型。该addedit方法坚持了modeldatabase被内部定义service的S对象(不是控制器内),控制器的责任完全是为了调用这些方法。

您可以parameters从 的body中检索request。该request对象在控制器内部可用ctx.request

由于在这个例子中create动作使用.add从方法category的服务类。该API文档有没有这方面的解释,你应该遵循在github的例子

module.exports = {
  // POST /profiles
  create: async (ctx) => {
    // use the fare service to add a new entry with value request.body.fare
    var profile = strapi.services.profile.add(ctx.request.body)
    strapi.services.fare.add(ctx.request.body.fare)
    return profile 
  }
};
Run Code Online (Sandbox Code Playgroud)

Profile服务addedit方法

您可以查看 github 上的示例以更好地理解addedit方法的逻辑。

add: async (values) => {
    // Extract values related to relational data.
    const relations = _.pick(values, Profile.associations.map(ast => ast.alias));
    const data = _.omit(values, Profile.associations.map(ast => ast.alias));

    // Create entry with no-relational data.
    const entry = await Profile.create(data);

    // Create relational data and return the entry.
    return Profile.updateRelations({ _id: entry.id, values: relations });
},
Run Code Online (Sandbox Code Playgroud)