关系和逆关系不能一起使用Adonis JS

时间:2019-05-22 11:17:03

标签: relationship adonis.js lucid

我有3个模型的国家/地区,州/市 country.js

  state () {
    return this.hasMany(State, 'id', 'country_id')
  }

state.js

 city () {
    return this.hasMany(City, 'id', 'state_id')
  }
  stateCountry () {
    return this.belongsTo(Country, 'country_id', 'id')
  }

city.js

cityState () {
    return this.belongsTo(State, 'state_id', 'id')
  }

现在我正在尝试获取两种类型的数据 1.从国家>州>城市(正常关系) 2.从城市>国家>国家(逆关系)

case 1:
const countries = await Country.query()
          .with('state.city')
          .fetch()
case 2:
const citties = await City.query()
      .with('cityState.stateCountry')
      .fetch()

现在,无论我首先运行哪个,都可以工作,并给我适当的结果,但是运行第二种情况则抛出500错误

this.RelatedModel.query不是函数

现在,如果我重新启动服务器并运行第二种情况,它将起作用,而第一种情况将停止工作。请帮助我们解决这个问题。看起来像某种查询或模型ORM中存在的缓存。

2 个答案:

答案 0 :(得分:2)

定义关系时,您需要提供名称空间,而不是模型的实例。 您的州模型将变为:

const Model = use('Model')


class State extends Model {

  city () {

    return this.hasMany('App/Models/City', 'id', 'state_id')

  }

  stateCountry () {

  return this.belongsTo('App/Models/Country', 'country_id', 'id')

  }

}

更新所有模型,一切正常。

答案 1 :(得分:0)

当没有导出模型类时发生相同的错误,因此请不要忘记导出它。

const Model = use('Model')

class State extends Model {
   ...
}
    
module.exports = State