Postgres/Knex "insert or update on table "位置“违反外键约束”
Postgres/Knex "insert or update on table "locations" violates foreign key constraint"
当我尝试在 Knex 和 Postgres 中 运行 种子时,我继续遇到同样的错误。错误是 error: insert or update on table "locations" violates foreign key constraint "locations_user_id_fore
ign"
。谁能弄清楚为什么会抛出此错误?我试过改变一堆东西。谢谢!
用户迁移
exports.up = function(knex, Promise) {
return knex.schema.createTable('users', function(table) {
table.increments()
table.string('email').notNullable();
table.string('password').notNullable();
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable('users')
};
地点Table
exports.up = function(knex, Promise) {
return knex.schema.createTable('locations', function(table) {
table.increments('id');
table.string('placename').notNullable();
table.float('latitude').notNullable();
table.float('longitude').notNullable();
table.integer('user_id').notNullable().references('id').inTable('users').onDelete('cascade');
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable('locations')
};
用户种子
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
// Inserts seed entries
return knex('users').insert([
{email: 'allie@gmail.com', password: 'p1'},
{email: 'bob@gmail.com', password: 'p2'},
{email: 'minnie@gmail.com', password: 'p3'}
]);
});
};
位置种子
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('locations').del()
.then(function () {
// Inserts seed entries
return knex('locations').insert([
{placename: 'Himeji', latitude: 34.8394, longitude: 134.6939, user_id: 1},
{placename: 'Long Beach', latitude: 33.7701, longitude: 118.1937, user_id: 3},
{placename: 'Seattle', latitude: 47.6253, longitude: 122.3222, user_id: 2}
]);
});
};
作为答案,因为对于评论来说太大了。
嗯,错误消息很清楚,表明您违反了 foreign key
约束。
这是因为要在 locations
中插入一行,您还需要提供一个 user_id
,它引用 table [=15] 中的列 id
=].如果该特定用户不在 users
table 中,则无法在位置中插入该 user_id
。看到这一行
table.integer('user_id').notNullable().references('id').inTable('users').onDelete('cascade');
所以首先你必须在 users
table 中添加 user
,然后你可以插入它 location
.
当我尝试在 Knex 和 Postgres 中 运行 种子时,我继续遇到同样的错误。错误是 error: insert or update on table "locations" violates foreign key constraint "locations_user_id_fore
ign"
。谁能弄清楚为什么会抛出此错误?我试过改变一堆东西。谢谢!
用户迁移
exports.up = function(knex, Promise) {
return knex.schema.createTable('users', function(table) {
table.increments()
table.string('email').notNullable();
table.string('password').notNullable();
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable('users')
};
地点Table
exports.up = function(knex, Promise) {
return knex.schema.createTable('locations', function(table) {
table.increments('id');
table.string('placename').notNullable();
table.float('latitude').notNullable();
table.float('longitude').notNullable();
table.integer('user_id').notNullable().references('id').inTable('users').onDelete('cascade');
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable('locations')
};
用户种子
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
// Inserts seed entries
return knex('users').insert([
{email: 'allie@gmail.com', password: 'p1'},
{email: 'bob@gmail.com', password: 'p2'},
{email: 'minnie@gmail.com', password: 'p3'}
]);
});
};
位置种子
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('locations').del()
.then(function () {
// Inserts seed entries
return knex('locations').insert([
{placename: 'Himeji', latitude: 34.8394, longitude: 134.6939, user_id: 1},
{placename: 'Long Beach', latitude: 33.7701, longitude: 118.1937, user_id: 3},
{placename: 'Seattle', latitude: 47.6253, longitude: 122.3222, user_id: 2}
]);
});
};
作为答案,因为对于评论来说太大了。
嗯,错误消息很清楚,表明您违反了 foreign key
约束。
这是因为要在 locations
中插入一行,您还需要提供一个 user_id
,它引用 table [=15] 中的列 id
=].如果该特定用户不在 users
table 中,则无法在位置中插入该 user_id
。看到这一行
table.integer('user_id').notNullable().references('id').inTable('users').onDelete('cascade');
所以首先你必须在 users
table 中添加 user
,然后你可以插入它 location
.