Relacionamento com Pivot Model

Estou utilizando no meu Model Produtos o conteúdo abaixo:

class Produto extends Model {

categoria () {

    return this.belongsTo('App/Models/Categoria', 'categoriaid', 'id')

}

desconto () {

    return this.belongsToMany('App/Models/Desconto', 'id', 'iddesconto').pivotModel('App/Models/ItensDesconto', 'id', 'idproduto')

}

}

No meu Controller do Produto, consigo listar normalmente o que preciso, quando eu listo apenas 1 Produto. Com esse respectivo código.

async produto({ params, request, response, view }) {

    const Produtos = await ProdutoModel.find(params.id)

    Produtos.categoria = await Produtos.categoria().fetch()

    Produtos.desconto = await Produtos.desconto().fetch()

    return Produtos

}

Portanto, quando tento fazer o mesmo em uma listagem maior, aparece a seguinte mensagem: “Produtos.categoria is not a function” Tentando usar o código abaixo:

async categoriaproduto({ params, request, response, view }) {

    //const Produtos = await ProdutoModel.query().where('categoriaid', params.id).fetch()        

    const Produtos = await ProdutoModel.query().where('categoriaid', params.id).fetch()

    Produtos.categoria = await Produtos.categoria().fetch()

    Produtos.desconto = await Produtos.desconto().fetch()

    return Produtos

}

Alguém sabe como solucionar este problema?

This line returns an instance of a Model:

const Produtos = await ProdutoModel.find(params.id)

And this line returns an array of instances:

const Produtos = await ProdutoModel.query().where('categoriaid', params.id).fetch()

Obviously the array doesn’t have a method categoria. Eager loading will help you.
https://adonisjs.com/docs/4.1/relationships#_eager_loading

2 Likes