2016-09-07 13 views
2

私は2つのテーブルの間の関係を作成しようとしていますが、私はオブジェクトをPostgresデータベースに挿入しようとするといくつかの問題が発生するようです。次のエラーが発生し続ける:insert or update on table "tournament" violates foreign key constraint "tournament_league_id_foreign"これは私のknex構文に関係していると思いますか?列は外部キー制約に違反しています

あなたは.references('id').inTable('league')ことを指定した列league_idあなたのために、tournamentテーブルを作成したときにDBに

 var data = { 
      id: id, 
      name: name, 
      league_id: leagueId 
     }; 

     var query = knex('tournament').insert(data).toString(); 
     query += ' on conflict (id) do update set ' + knex.raw('name = ?, updated_at = now()',[name]); 

     knex.raw(query).catch(function(error) { 
     log.error(error); 
     }) 

Knexテーブル

knex.schema.createTable('league', function(table) { 
    table.increments('id').primary(); 
    table.string('slug').unique(); 
    table.string('name'); 
    table.timestamp('created_at').notNullable().defaultTo(knex.raw('now()')); 
    table.timestamp('updated_at').notNullable().defaultTo(knex.raw('now()')); 
}), 
knex.schema.createTable('tournament', function(table) { 
    table.string('id').primary(); 
    table.integer('league_id').unsigned().references('id').inTable('league'); 
    table.string('name'); 
    table.boolean('resolved'); 
    table.timestamp('created_at').notNullable().defaultTo(knex.raw('now()')); 
    table.timestamp('updated_at').notNullable().defaultTo(knex.raw('now()')); 
}) 
+0

「移行する」とはどういう意味ですか? – redneb

+0

混乱して申し訳ありません。移行ではありません!編集した質問 –

答えて

3

を挿入します。これは、そのテーブル内のすべての行について、idが前の行のleague_idフィールドの値と同じであるテーブルに1つの行が存在する必要があることを意味します。明らかにあなたの挿入物(あなたの唯一の挿入物ですか?)はtournamentleague_idが存在しない行を追加しています。にあります。原則として、外国の制約(つまり、.references部分)は、リーグを最初に作成し、そのリーグでトーナメントを作成する必要があることを意味します(実際には意味があります)。

関連する問題