Как я могу сделать свое отношение к многим в adonis. js - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь установить связь между двумя таблицами. Мои отношения принадлежат ToMany между user => user_bet_match => соответствует. У пользователя может быть много user_bet_match, а у совпадений может быть много user_bet_match.

Моя миграция базы данных: Таблица соответствий:

    this.create('matchs', (table) => {
      table.increments()
      table.integer('round_id').unsigned()
      table.integer('league_id').unsigned()
      table.integer('hometeam_id').unsigned()
      table.integer('awayteam_id').unsigned()
      table.string('final_score_hometeam_goal')
      table.string('final_score_awayteam_goal')
      table.string('halftime_score_hometeam_goal')
      table.string('halftime_score_awayteam_goal')
      table.date('event_date')
      table.integer('event_timestamp')
      table.boolean('betailable').defaultTo(false)
      table.boolean('is_finish').defaultTo(false)
      table.timestamps()
    })

Таблица пользователей:

    this.create('users', (table) => {
      table.increments()
      table.string('username', 80).notNullable().unique()
      table.string('email', 254).notNullable().unique()
      table.string('password', 60).notNullable()
      table.timestamps()
    })

таблица user_bet_match :

    this.create('user_bet_match', (table) => {
      table.increments()
      table.integer('user_id').unsigned()
      table.integer('match_id').unsigned()
      table.string('choice').notNullable()
      table.timestamps()
    })

Моя пользовательская модель:

class User extends Model {
  static boot () {
    super.boot()

    this.addHook('beforeSave', async (userInstance) => {
      if (userInstance.dirty.password) {
        userInstance.password = await Hash.make(userInstance.password)
      }
    })
  }

  tokens () {
    return this.hasMany('App/Models/Token')
  }
  match () {
    return this.belongsToMany('App/Models/Match').pivotTable('user_bet_match')
  }

Мой модуль совпадения ставок пользователя:

'use strict'

/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')
const Database = use('Database')



class UserBetMatch extends Model {

  user () {
    return this.hasOne('App/Models/User')
  }
  matchs () {
    return this.hasOne('App/Models/Match')
  }
}

module.exports = UserBetMatch


И мой модуль совпадений:

'use strict'

/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')

class Match extends Model {
  userbetmatchs () {
    return this.hasMany('App/Models/UserBetMatch')
  }
}

module.exports = Match


И когда я делаю:

let k = user.match().fetch()

С этим отношением:

  match () {
    return this.belongsToMany('App/Models/Match').pivotTable('user_bet_match')
  }

Это возвращает меня sqlMessage: "Table 'bo7jjjccwliucibms5pf.matches' doesn't exist" Но я никогда не упоминаю о таблице "спичек" .. Я не не знаю почему ..

1 Ответ

1 голос
/ 08 января 2020

Я заметил, что вы изменили имя таблиц в миграции (по умолчанию с adonis cli: match; user_bet_matches)

Попробуйте использовать это в своих моделях:

static get table () {
    return 'matchs' // Your table name
}

^ https://adonisjs.com/docs/4.0/lucid#_table

Lucid не учитывает миграции. Поэтому необходимо указать имя таблицы, если оно не является именем по умолчанию (с adonis cli).

Не стесняйтесь, скажите мне, если это не справедливо.

...