我尝试使用knex为数据库播种。在贡献者的帮助下,我成功地在一张桌子上播种了我需要采取的几个步骤:
如前所述,我有一个工作表。因为我比一个屋顶大头钉更聪明并且必须为另一个桌子做几乎完全相同的事情,所以我只是复制了第一个种子文件中的工作,将其放入第二个种子文件中,做了几个适当的修改(具体来说,在第二个表中我只需要填充1个外键值)并且......它不起作用。
我不知所措。当然,我在这段代码中遗漏了一些愚蠢的小东西,但我无法找到它。我尝试播种units
表格,我必须填充properties.id
值。
exports.seed = function(knex, Promise) {
console.log('Seeding the %s table...', tableName);
Promise.resolve([
'properties',
])
.map(function(table) {
// Pull foreign key values (property_id)
var ids = knex.select('id').from(table).pluck('id');
// AT THIS POINT THE ids VARIABLE HAS A VALUE
return ids;
})
.spread(function(properties) {
// BUT I NEVER SEE THIS LOG PRINT
console.log('SPREADING UNITS');
});
};
我做错了什么?我已将.catch()
和.error()
放入此内容中,但没有任何内容写入日志。不知何故,我似乎永远不会陷入.spread(...)
方法。
更新
无论它的价值如何,这都是.map
方法返回之前的内容...
{ client:
{ Formatter: { [Function: Formatter_MySQL] super_: [Function: Formatter] },
Raw: { [Function: Raw_MySQL] super_: [Object] },
Transaction: { [Function: Transaction_MySQL] super_: [Object] },
QueryBuilder: { [Function: QueryBuilder_MySQL] super_: [Object] },
QueryCompiler: { [Function: QueryCompiler_MySQL] super_: [Function: QueryCompiler] },
migrationConfig: { tableName: 'knex_migration', directory: './migrations' },
seedConfig: { directory: './seeds' },
Runner: { [Function: Runner_MySQL] super_: [Function: Runner] },
connectionSettings:
{ host: '127.0.0.1',
port: '3306',
user: 'root',
password: '',
database: 'realster',
timezone: 'UTC',
charset: 'utf8',
debug: false },
Pool: { [Function: Pool_MySQL] super_: [Function: Pool] },
databaseName: 'realster',
pool: { client: [Circular], config: [Object], genericPool: [Object] },
_events: { start: [Function], query: [Function] },
Seeder: { [Function: Seeder_MySQL] super_: [Function: Seeder] } },
_single: { table: 'properties', pluck: 'id' },
_statements:
[ { grouping: 'columns', value: [Object] },
{ grouping: 'columns', type: 'pluck', value: 'id' } ],
_errors: [],
_joinFlag: 'inner',
_boolFlag: 'and',
_notFlag: false,
and: [Circular],
_method: 'pluck' }
答案 0 :(得分:1)
您在spread
的结果中使用Promise
,map
的方法。
map
可能会生成一个没有spread()
函数的数组。
此外,spread
通常会收到带有多个参数的回调。如果您需要一个数组,只需使用旧的then
。
总之,我猜您的代码应该更像这样:
var mapProperties = function(table) {
return knex.select('id').from(table).pluck('id');
};
Promise.resolve([
'properties'
])
.then(mapProperties)
.then(function(properties) {
console.log(properties);
});