I am continuing to get the same error when I try to run seeds in Knex and Postgres. The error is error: insert or update on table "locations" violates foreign key constraint "locations_user_id_fore
ign". Can anyone figure out why it is throwing this error? I have tried changing a bunch of things. Thanks!
User Migrations
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')
};
Locations 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')
};
User Seeds
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
// Inserts seed entries
return knex('users').insert([
{email: '[email protected]', password: 'p1'},
{email: '[email protected]', password: 'p2'},
{email: '[email protected]', password: 'p3'}
]);
});
};
Location Seeds
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}
]);
});
};
Putting as answer, as it would be too big for a comment.
Well the error message is clear enough that you have violated a foreign key constraint.
This is because for inserting a row in locations you need to give a user_id as well, which is referencing to column id in table users. If that particular user is not present in users table, you cannot insert that user_id in locations. See this line
table.integer('user_id').notNullable().references('id').inTable('users').onDelete('cascade');
So first you have to add that user in users table, then you can insert it it location.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With