Tambah secara automatik ID pengguna yang dilog masuk ke medan kunci asing KeystoneJS
P粉239164234
P粉239164234 2023-09-14 12:23:19
0
1
672

Saya sedang mencipta aplikasi menggunakan dokumentasi yang disediakan oleh rangka kerja KeystoneJS. Jadi, dalam apl saya, saya mempunyai dua jadual, satu ialah Pengguna dan satu lagi ialah Siaran. Jadi, saya tertanya-tanya, apabila saya membuat siaran dengan log masuk ke kawasan pentadbir, terdapat medan dengan lajur kunci asing, dan medan itu kosong untuk diisi dengan nilai kunci asing dari jadual pengguna. Jadi, apabila saya mencipta siaran baharu menggunakan id pengguna yang dilog masuk dalam KeystoneJS, saya mahu sistem menambah nilai kunci asing secara automatik kepada pengarang.

Jadi, saya mencari di mana-mana untuk penyelesaian tetapi tidak menemui penyelesaian yang sesuai.

Jika sesiapa mempunyai sebarang idea tentang perkara ini, amatlah dihargai jika anda dapat menjawab soalan ini.

Terima kasih

P粉239164234
P粉239164234

membalas semua(1)
P粉949190972

Pernahkah anda melihat Contoh Blog Terkawal?

Ia mempunyai senarai yang serupa dengan projek anda: PostsUsers,可以是ContributorsModerators。在你的情况下,贡献者/管理员的区别并不重要,你会对Post列表上的钩子感兴趣,特别是resolveInput.createHooks, ia kelihatan seperti ini:

hooks: {
  resolveInput: {
    create: ({ context, resolvedData }) => {
      resolvedData.createdAt = new Date();
      if (context.session?.contributor) {
        return {
          ...resolvedData,
          createdBy: {
            connect: {
              id: context.session?.contributor?.id,
            },
          },
        };
      }
      return resolvedData;
    },
  },
  // 其他钩子...
},

Menurut Dokumentasi:

Jadi inilah peluang kami untuk menukar nilai sebelum menyimpan, termasuk mengisi atau memaksa nilai seperti medan Post.author anda.

resolveInput Mendapat objek context resolveInput获取context对象,其中包括对session对象的引用。该对象的内容由你的会话存储函数决定,但通常包含有关当前用户的信息。在这个示例中,如果登录的用户是贡献者,我们从context.session?.contributor?.id获取他们的贡献者ID,并将其保存到createdBy字段。同时,createdAt, yang termasuk rujukan A kepada objek session. Kandungan objek ini ditentukan oleh fungsi stor sesi

anda tetapi biasanya mengandungi maklumat tentang semasa maklumat pengguna. Dalam contoh ini, jika pengguna log masuk ialah penyumbang, kami mendapatkan ID penyumbang mereka daripada context.session?.contributor?.id dan menyimpannya ke medan createdBy. Pada masa yang sama, medan createdAt juga ditetapkan kepada tarikh dan masa semasa.

resolvedData对象和钩子想要进行的任何其他更改)。另一种方法是在字段级别添加resolvedData函数,但这样我们就需要两个单独的函数 - 一个用于createdAt,另一个用于createdByPerhatikan bahawa memandangkan cangkuk ini dikonfigurasikan pada peringkat senarai, ia sepatutnya mengembalikan data untuk keseluruhan item (pada asasnya - setiap fungsi mengembalikan satu nilai. Untuk mendapatkan maklumat lanjut tentang perbezaan ini, lihat Panduan Cangkuk

.

Selain itu, adalah penting untuk tidak mengelirukan cangkuk dengan Kawalan Aksesaccess ​​- iaitu sama ada penyumbang harus dibenarkan membuat siaran di tempat pertama. Dalam contoh ini, kawalan akses dikonfigurasikan secara berasingan, dalam konfigurasi

senarai.

Satu nota akhir - pada masa penulisan, dokumentasi Hooks API resolveInput钩子(在列表和字段级别),但没有将其分解为不同的操作(即resolveInput.createresolveInput.updatemerangkumi

). Ini hanyalah peningkatan sintaks baru-baru ini, ia tidak mengubah cara cangkuk digunakan. Jika anda hanya menggunakan API dalam dokumentasi, kod di atas boleh ditulis sebagai: 🎜
hooks: {
  resolveInput: ({ operation, context, resolvedData }) => {
    // 仅对创建操作运行(忽略更新)
    if (operation !== 'create') return resolvedData;
    resolvedData.createdAt = new Date();
    if (context.session?.contributor) {
      return {
        ...resolvedData,
        createdBy: {
          connect: {
            id: context.session?.contributor?.id,
          },
        },
      };
    }
    return resolvedData;
  },
  // 其他钩子...
},
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan