我如何在 adonis.js 中建立我的 belongsToMany 关系
How I can make my belongsToMany relation in adonis.js
我正在尝试建立两个 table 之间的关系。
我的关系是用户 => user_bet_match => 匹配之间的 belongsToMany。
一个用户可以有很多 user_bet_match,匹配可以有很多 user_bet_match.
我的数据库迁移是:
匹配 table :
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()
})
用户table:
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 table :
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"
但我从来没有提到 table "matches"..
不知道为什么..
我注意到您在迁移中更改了 table 的名称(默认情况下使用 adonis cli : matches; user_bet_matches)
尝试在您的模型中使用它:
static get table () {
return 'matchs' // Your table name
}
^https://adonisjs.com/docs/4.0/lucid#_table
Lucid 不考虑迁移。
因此,如果 table 不是默认名称(使用 adonis cli),则有必要指定它的名称。
如果不公平,请随时告诉我。
我正在尝试建立两个 table 之间的关系。 我的关系是用户 => user_bet_match => 匹配之间的 belongsToMany。 一个用户可以有很多 user_bet_match,匹配可以有很多 user_bet_match.
我的数据库迁移是: 匹配 table :
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()
})
用户table:
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 table :
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"
但我从来没有提到 table "matches"..
不知道为什么..
我注意到您在迁移中更改了 table 的名称(默认情况下使用 adonis cli : matches; user_bet_matches)
尝试在您的模型中使用它:
static get table () {
return 'matchs' // Your table name
}
^https://adonisjs.com/docs/4.0/lucid#_table
Lucid 不考虑迁移。 因此,如果 table 不是默认名称(使用 adonis cli),则有必要指定它的名称。
如果不公平,请随时告诉我。