如何使用 faker.js 使用外键为 table 播种
How to seed a table with a foreign key using faker.js
我正在尝试使用 faker.js 和 knex 为包含外键的 table 播种。有问题的两个 table 是 "accounts" 和 "users"。 user table 包含 accountid 字段作为外键。现在,我可以毫无问题地播种 "accounts" table:
const faker = require('faker');
function fakeAccount() {
var account = {
accountid: faker.random.number(),
createdat: faker.date.recent(),
updatedat: faker.date.recent()
}
return account;
}
exports.seed = function(knex) {
// Deletes ALL existing entries
return knex('accounts').del()
.then(function () {
for (let i = 1; i< 10; i++) {
fakeAccounts.push(fakeAccount());
}
// Inserts seed entries
return knex('accounts').insert(fakeAccounts);
});
};
当我尝试播种时 "users"。我请求获取帐户中的所有行以迭代并为每个帐户 ID 创建四个用户,这就是代码。它不是最漂亮的代码,但它应该可以工作。问题是我的承诺正在返回待处理。从 "account" 获取所有记录的函数工作得很好:
const faker = require('faker');
const db = require('../../accounts/accountdb.js');
async function returnsQueryBuilder() {
return await db.find();
}
function userbatchfunc() {
var userbatch = [];
var fakerarray = [];
var userarray = [];
var queryArray = returnsQueryBuilder();
console.log(queryArray)
for (let i = 1; i < queryArray.length; i++) {
for (let j = 1; j < 4; j++) {
userbatch = {
accountid : queryArray[j]['accountid'],
image : faker.image.avatar(),
firstName : faker.name.firstName(),
lastName : faker.name.lastName(),
email : faker.internet.email(),
passwordhash : faker.random.number(),
password: "password1234",
telephone : faker.phone.phoneNumber(),
telephone_ext : "",
registrationDate : faker.date.recent(),
inactive : "true",
allowogin : "true"
}
fakerarray = fakerarray.push(userbatch);
}
userarray = userarray.push(fakerarray);
}
return userarray;
}
exports.seed = function(knex) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
return knex('users').insert(userbatchfunc());
});
};
我为我的帐户获取种子
Promise { pending }
。如果您想查看 find() 函数:
const db = require('../database/db_config.js');
module.exports = {
find
}
function find() {
return db('accounts');
}
谁能告诉我为什么我的承诺没有得到解决?
您需要 var queryArray = await returnsQueryBuilder();
才能获得已解决承诺的结果。
我正在尝试使用 faker.js 和 knex 为包含外键的 table 播种。有问题的两个 table 是 "accounts" 和 "users"。 user table 包含 accountid 字段作为外键。现在,我可以毫无问题地播种 "accounts" table:
const faker = require('faker');
function fakeAccount() {
var account = {
accountid: faker.random.number(),
createdat: faker.date.recent(),
updatedat: faker.date.recent()
}
return account;
}
exports.seed = function(knex) {
// Deletes ALL existing entries
return knex('accounts').del()
.then(function () {
for (let i = 1; i< 10; i++) {
fakeAccounts.push(fakeAccount());
}
// Inserts seed entries
return knex('accounts').insert(fakeAccounts);
});
};
当我尝试播种时 "users"。我请求获取帐户中的所有行以迭代并为每个帐户 ID 创建四个用户,这就是代码。它不是最漂亮的代码,但它应该可以工作。问题是我的承诺正在返回待处理。从 "account" 获取所有记录的函数工作得很好:
const faker = require('faker');
const db = require('../../accounts/accountdb.js');
async function returnsQueryBuilder() {
return await db.find();
}
function userbatchfunc() {
var userbatch = [];
var fakerarray = [];
var userarray = [];
var queryArray = returnsQueryBuilder();
console.log(queryArray)
for (let i = 1; i < queryArray.length; i++) {
for (let j = 1; j < 4; j++) {
userbatch = {
accountid : queryArray[j]['accountid'],
image : faker.image.avatar(),
firstName : faker.name.firstName(),
lastName : faker.name.lastName(),
email : faker.internet.email(),
passwordhash : faker.random.number(),
password: "password1234",
telephone : faker.phone.phoneNumber(),
telephone_ext : "",
registrationDate : faker.date.recent(),
inactive : "true",
allowogin : "true"
}
fakerarray = fakerarray.push(userbatch);
}
userarray = userarray.push(fakerarray);
}
return userarray;
}
exports.seed = function(knex) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
return knex('users').insert(userbatchfunc());
});
};
我为我的帐户获取种子
Promise { pending }
。如果您想查看 find() 函数:
const db = require('../database/db_config.js');
module.exports = {
find
}
function find() {
return db('accounts');
}
谁能告诉我为什么我的承诺没有得到解决?
您需要 var queryArray = await returnsQueryBuilder();
才能获得已解决承诺的结果。