मैं knex के लिए नया हूँ और वर्षों में RDBMS को नहीं छुआ है (NoSQL भूमि में रहा हूँ), इसलिए यहाँ मेरे साथ रहें।

मेरे पास दो माइग्रेशन फ़ाइलें हैं, एक ट्रैक के लिए और एक उपयोगकर्ताओं के लिए (ट्रैक उपयोगकर्ताओं के स्वामित्व में हैं)। नीचे प्रासंगिक फाइलें हैं:

माइग्रेशन/20190919103115_users.js

exports.up = function(knex) {
  return knex.schema.createTable('users', table => {
    table.increments('id');
    table.string('email', 50);
    table.string('first_name', 50);
    table.string('last_name', 50);
  }  
};

exports.down = function(knex) {
  return knex.schema.dropTable('users');
};

माइग्रेशन/20190406112728_tracks.js

exports.up = function(knex) {
  return knex.schema.createTable('tracks', table => {
    table.increments('id');
    table.string('name', 140).notNullable();
    table.integer('owner_id').notNullable();
    table
      .foreign('owner_id')
      .references('id')
      .inTable('users')
      .onDelete('CASCADE');
    table.json('metadata');
  });
};

exports.down = function(knex) {
  return knex.schema.dropTable('tracks');
};

जब मैं yarn knex migrate:up चलाता हूं, मुझे मिलता है:

migration file "20190406112728_tracks.js" failed
migration failed with error: alter table "tracks" add constraint "tracks_owner_id_foreign" foreign key ("owner_id") references "users" ("id") on delete CASCADE - relation "users" does not exist

मुझे आधिकारिक क्नेक्स दस्तावेज़ीकरण की बहुत कमी है (यह किसी और चीज़ की तुलना में अधिक संदर्भ है) और यह पता नहीं लगा सकता कि मुझे क्या याद आ रहा है। स्पष्ट रूप से मुझे users को tracks से पहले बनाने के लिए किसी तरह की आवश्यकता है, लेकिन यह नहीं पता कि कैसे।

संपादित करें:

ऐसा लगता है कि यह कैसे किया जाता है: https://github.com/tgriesser/ knex/issues/938#issuecomment-131491877

लेकिन टेबल के पूरे सेट को एक ही माइग्रेशन फाइल में रखना गलत लगता है। मैंने सोचा था कि बिंदु प्रति तालिका एक माइग्रेशन फ़ाइल बनाना था?

1
ffxsam 19 सितंबर 2019, 18:59

1 उत्तर

सबसे बढ़िया उत्तर

माइग्रेशन फ़ाइलें निष्पादन से पहले नाम से क्रमबद्ध की जाती हैं, इसलिए ऐसा लगता है कि आपके tracks फ़ाइल नाम की तारीख पहले की है, इसलिए यह उपयोगकर्ताओं के निर्माण से पहले चलती है।

बस npx knex migrate:make create_users, और फिर npx knex migrate:make create_tracks चलाएं।

यह उचित टाइमस्टैम्प के साथ नई फाइलें उत्पन्न करेगा, आपके कोड को नई फाइलों में कॉपी करेगा, पुराने को हटा देगा:]

2
felixmosh 20 सितंबर 2019, 16:54