2016-12-18 20 views
1

これは私の最初のpsqlデータベースです。私はknexを使用しています。テーブルの挿入または更新は、外部キー制約に違反します。PSQL/Knex

私はusers、users_posts、users_commentsという3つのテーブルを持っています。私はそれを設定して、ユーザーが物事を投稿し、他のユーザーの投稿にコメントできるようにしたい。

私はこのエラーを取得するusers_commentsシードた場合:

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

をどのように私は、外国post_idのキーを受け入れるようにusers_commentテーブルを得るために、私のテーブルを変更することができますか?あるいは、ポストユーザーやユーザーとのコメントを設定する良い方法がありますか?

ユーザテーブル

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); 
関連する問題