【问题标题】:Save data to two different resources将数据保存到两个不同的资源
【发布时间】:2020-05-07 20:36:50
【问题描述】:

我正在尝试保存用户的完整记录,但我依赖于两个单独的表。配置文件数据保存在一个资源中,地址保存在另一个资源中。如何编写代码以便它首先保存配置文件,然后从生成的 id 中保存地址?有可能吗?

Profile form

Address form

这是我的创建用户代码:

export const BarberCreate = (props) => {
  return (
    <Create {...props}>
      <TabbedForm toolbar={<BarberCreateToolbar />}>
        <FormTab label="Perfil">
          <TextInput source="name" />
          <TextInput source="email" />
          <DateInput source="birthday" />
          <TextInput source="phone" placeholder="(99) 99999-9999" />
          <TextInput source="transport" />
        </FormTab>

        <FormTab label="Endereço">
          <TextInput source="street" label="Rua" />
          <TextInput source="city" label="Cidade" />
          <TextInput source="district" label="Bairro" />
        </FormTab>
      </TabbedForm>
    </Create>
  );
};```

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我已经尝试重写提交类的方法。但这非常困难,而且有点超出我的了解。我想象的最快的方法是这样的: 1º 填写所有字段(个人资料和地址) 第二注册个人资料数据。 3rd 从配置文件中生成的id,注册地址。

标签: javascript reactjs react-admin


【解决方案1】:

最好在后端执行此操作,可能支持事务,但如果您不能,则在 react-admin 方面进行的一种方法是装饰 dataProvider。

v3

const userSaverDataProvider = dataProvider => ({
    ...dataProvider,
    create: async (resource, params) => {

        if (resource === 'users') {

            const profile = await dataProvider.create('profile', {data: {
                name: params.data.name,
                ....
            }})

            await dataProvider.create('address', {data: {
                profileID: profile.data.id,
                street: params.data.street,
                ...
            }})

            return profile        

        }        

        return dataProvider.create(resource, params)
    }
})

如果您在 react-admin 上批量创建用户,可能还需要装饰 createMany。另外,结帐https://github.com/FusionWorks/react-admin-google-maps,它可能有用

【讨论】:

  • 你是对的。在这种情况下,这是最好的方法。但是,由于截止日期,我选择将地址嵌套在配置文件中。无论如何感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多