John
John

Reputation: 13

Adonis.js - Seeding Users and Profiles throwing DB error (Postgres)

I am trying to write a seed file for users and profiles with a one to one relationship and currently getting an "error: relation 'user_profiles' does not exist". From digging around, it seems like Adonis will assume this as a pivot table in the case of a many to many relationship. What I (think or intend to) have is a one to one relationship between users and profiles. Thanks in advance! Newbie to SQL and Adonis. As a side note, the user persists to the db, but there is no corresponding profile.

// My User Schema

class UserSchema extends Schema {
  up () {
    this.create('users', (table) => {
      table.increments('id')
      table.string('username', 80).notNullable().unique()
      table.string('email', 254).notNullable().unique()
      table.string('password', 60).notNullable()
      // table.integer('profile_id').unsigned().references('id').inTable('userprofiles')
      table.timestamps()
    })
  }

  down () {
    this.drop('users')
  }
}
// My Profile Schema

class UserprofileSchema extends Schema {
  up () {
    this.create('userprofiles', (table) => {
      table.increments()
      table.string('first_name')
      table.string('last_name')
      // table.integer('user_id')
      //   .unsigned().references('id').inTable('users')
      table.integer('user_id')
        .unsigned()
        .index('user_id')

      table.foreign('user_id')
        .references('users.id')

      table.timestamps()
    })
  }

  down () {
    this.drop('userprofiles')
  }
}

My User model includes the following relationship definition:

profile () {
  return this.hasOne('App/Models/UserProfile')
}
// Seed script

class UserSeeder {
  async run () {
    try {
      const user = await Factory.model('App/Models/User').create()
      const userProfile = await Factory.model('App/Models/UserProfile').make()
      userProfile.user_id = user.id
      await user.profile().save(userProfile)
    } catch (e) {
      console.log('Error From Seeder: ', e);
    }
  }
}

Error code '42P01' and can post whole body if needed. Thanks!

Upvotes: 1

Views: 1054

Answers (1)

Rajeev Radhakrishnan
Rajeev Radhakrishnan

Reputation: 1004

On your Model userProfile, set table name as follows.

class User extends Model {
  static get table () {
    return 'userprofiles'
  }
}

Upvotes: 2

Related Questions