knex migration creating foreign key

Lei picture Lei · Feb 5, 2015 · Viewed 17.4k times · Source

I tried the code in the link to create FK:

how to do knex.js migration

I got an error on line :

table.bigInteger('AddressId').unsigned().index().inTable('Address').references('id');

The error:

TypeError: Object # has no method 'inTable' at 
 TableBuilder_MySQL._fn (/Users/lwang/knex/migrations/20150204161920_lei_maigration.js:15:56) at
 TableBuilder_MySQL.TableBuilder.toSQL (/Users/lwang/knex/node_modules/knex/lib/schema/tablebuilder.js:61:12) at 
 SchemaCompiler_MySQL.createTable (/Users/lwang/knex/node_modules/knex/lib/schema/compiler.js:14:53) at 
 SchemaCompiler_MySQL.SchemaCompiler.toSQL (/Users/lwang/knex/node_modules/knex/lib/schema/compiler.js:35:24) at 
 SchemaBuilder_MySQL.SchemaBuilder.toSQL (/Users/lwang/knex/node_modules/knex/lib/schema/builder.js:41:35) at 
 Runner_MySQL. (/Users/lwang/knex/node_modul...

Answer

devconcept picture devconcept · Apr 27, 2015

This might come a little late but the error is because

table.bigInteger('AddressId').unsigned().index().inTable('Address').references('id');

should be written

table.bigInteger('AddressId').unsigned().index().references('id').inTable('Address')

The inTable function only exists after calling references as explained in the documentation http://knexjs.org/#Schema-inTable

Sets the "table" where the foreign key column is located after calling column.references.