2016-12-18 5 views
1

Это моя первая база данных psql. Я использую knex.Вставка или обновление таблицы нарушает ограничение внешнего ключа. PSQL/Knex

У меня есть 3 таблицы: пользователи, пользователи_посты и пользователи_комментариев. Я хочу настроить его так, чтобы пользователи могли публиковать сообщения, а также комментировать сообщения других пользователей.

Когда я семя в users_comments я получаю эту ошибку:

insert or update on table "users_comments" violates foreign key constraint

Как я могу изменить свои таблицы, чтобы получить таблицу users_comment принять внешний ключ POST_ID? Или у меня есть лучший способ настроить комментарии к сообщениям и пользователям?

пользователи таблице

table.increments(); 
table.string('username').notNullable().defaultTo('').unique(); 
table.string('email').notNullable().unique(); 
table.specificType('hashed_password', 'char(60)').notNullable(); 
table.timestamps(true, true); 

users_posts стол

table.increments(); 
table.integer('user_id') 
.notNullable() 
.references('id') 
.inTable('users') 
.onDelete('CASCADE') 
.index(); 
table.string('post_title').notNullable().defaultTo(''); 
table.string('post_content').notNullable().defaultTo(''); 
table.timestamps(true, true); 

users_comments стол

table.increments(); 
table.integer('user_id') 
.notNullable() 
.references('id') 
.inTable('users') 
.onDelete('CASCADE') 
.index(); 
table.integer('post_id') 
    .notNullable() 
    .references('id') 
    .inTable('users_posts') 
    .onDelete('CASCADE') 
    .index(); 
table.string('comment_content').notNullable().defaultTo(''); 
table.timestamps(true, true); 

users_comments семян:

id: 1, 
    user_id: 1, 
    post_id: 1, 
    comment_content:"...", 
    created_at: new Date('2016-06-29 14:26:16 UTC'), 
    updated_at: new Date('2016-06-29 14:26:16 UTC') 

ответ

0

Получил работу. Сделаны эти изменения в user_comments ...

table.integer('user_id') 
.notNullable() 
.references('id') 
.inTable('users') 
.onDelete('CASCADE') 
.index(); 
table.integer('id') 
.notNullable() 
.references('user_posts') 
.onDelete('CASCADE') 
.index();  
table.string('comment_content').notNullable().defaultTo(''); 
table.timestamps(true, true);