Как автоматически загрузить отношения с Adonis с помощью find или findOrFail? - PullRequest
0 голосов
/ 27 апреля 2020

Есть ли способ автозагрузки отношений с помощью findByOrFail (или любого другого метода, например find et c.)?

В приведенном ниже коде метод with() не определен.

async show({ params, response }) {
  try {
    return await Company.findByOrFail('domain', params.id).with('websites')
  } catch (error) {
    console.error(error)

    switch (error.name) {
      case 'ModelNotFoundException':
        return response.notFound({ message: 'companies_show_not_found' })

      default:
        return response.badRequest({ message: 'something_went_wrong' })
    }
  }
}

Ответы [ 3 ]

1 голос
/ 28 апреля 2020

Почему бы просто не сделать это с запросом вроде:

await Company.query().where('domain', params.id).with('websites').firstOrFail()
0 голосов
/ 29 апреля 2020

Вы можете использовать отношение как это

async show({ params, response }) {
  try {
    const relationdata= await Company.findByOrFail('domain', params.id)
return await relationdata.websites().fetch()
  } catch (error) {
    console.error(error)

    switch (error.name) {
      case 'ModelNotFoundException':
        return response.notFound({ message: 'companies_show_not_found' })

      default:
        return response.badRequest({ message: 'something_went_wrong' })
    }
  }
}

0 голосов
/ 27 апреля 2020

Похоже, самое чистое решение - использовать globalScope.

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

    this.addGlobalScope(function (builder) {
      builder.with('websites')
    })
  }

  websites() {
    return this.hasMany('App/Models/Website')
  }
}
...