No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Resolviendo relaciones uno a muchos

19/27
Recursos

Aportes 13

Preguntas 14

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Creo que este no es un curso para principiantes.
Es muy sorprendente como navegamos por medio de las relaciones de la base de datos sin siquiera tener un modelo f铆sico a mano para consultarlo y para que el desarrollo de los servicios y los modelos sea m谩s expl铆cito.
Por eso creo que un principiante podr铆a tener algunas dificultades en este curso.
Sin embargo tambi茅n creo que el profe explica de una manera muy natural como las entidades se relacionan y c贸mo llegamos a resolver cada escenario.

Muchachos, es importante agregar el atributo foreignKey al belongsTo que se agrega en la tabla de products. De lo contrario node agrega a los querys una columna que no existe. Por lo tanto todos los querys que intenten fallaran por que no consigue la columna.
.
Si agregas esto en tu clase de associate

  this.belongsTo(models.UsersRol, { as: 'rols'}) // to many users

Lo que sucedera es que node incluye en los script 鈥渞olsId鈥 como si fuera una columna, que no fue asignada en el modelo y tampoco existe en la bbdd.
.
Como lo resuelves? Incluye esto.

  this.belongsTo(models.UsersRol, {foreignKey: 'id', as: 'rols'}) // to many users

Solo asi me permitio hacer los querys

Al igual que en la relaci贸n uno a uno, se hacen las respectivas asociaciones dentro de los servicios de categor铆as y productos.

product.service.js:

async create(data) {
    const newProduct = await models.Product.create(data);
    return newProduct;
  }

  async find() {
    const products = await models.Product.findAll({
      include: ['category'],
    });
    return products;
  }

category.service.js:

async create(data) {
    const newCategory = await models.Category.create(data);
    return newCategory;
  }

  async find() {
    const categories = await models.Category.findAll();
    return categories;
  }

  async findOne(id) {
    const category = await models.Category.findByPk(id, {
      include: ['products'],
    });
    return category;
  }

Cabe mencionar que se debe modificar el esquema de producto ya que un producto est谩 asociado a un categoryId ya que el esquema de la validaci贸n (Joi) debe coincidir con la BD en la llave for谩nea.

product.schema.js:

const Joi = require('joi');

const id = Joi.number().integer();
const name = Joi.string().min(3).max(15);
const price = Joi.number().integer().min(10);
const description = Joi.string().min(10);
const image = Joi.string().uri();
const categoryId = Joi.number().integer();

const createProductSchema = Joi.object({
  name: name.required(),
  price: price.required(),
  description: description.required(),
  image: image.required(),
  categoryId: categoryId.required(),
});

const updateProductSchema = Joi.object({
  name: name,
  price: price,
  description: description,
  image: image,
  categoryId,
});

Otro aporte igual de importante. Si quieres capturar la exception de ForeignKey puedes agregar esto al middlelware de exceptions

const { ValidationError, ForeignKeyConstraintError } = require('sequelize')

Con esto puedes validar el tipo de excepcion colocando un if de la siguiente manera

if (err instanceof ValidationError && err.isBoom) { 
\\ respuesta
}else if(err instanceof ForeignKeyConstraintError && err.isBoom ){
// segunda respuesta
}
next(err) // Si no se cumple ninguna pasa al siguiente middlelware

Me aparece este error al crear una categor铆a:
ValidationErrorItem {
message: 鈥楥ategory. id cannot be null鈥,
type: 鈥榥otNull Violation鈥,
.
cuanlo lo solucione les comparto cual fue la soluci贸n.

bua me encanta lo util y realizta que es el curso

este curso es excelente

que bien explicado el curso, tiene toda mi atenci贸n, fabuloso!

  • Se帽alamos las relaciones

    • Los schemas de la DB y Joi deben coincidir en la foreign key
    • Podemos agregar la relaci贸n en los servicios
const { models }= require('./../libs/sequelize');

 async findOne(id) {
    const category = await models.Category.findByPk(id, {
      include: ['products']
    });
    return category;
  }

Me cost贸 un poco entenderlo uwu

Excelente curso.

El curso esta muy chido espero que m谩s adelante tambi茅n podamos ver c贸mo paginar y no solo una paginaci贸n simple sino como se vio ahora la necesidad, una paginaci贸n con muchos elementos tra铆dos por asociaci贸n.

Excelente, me gusto esta clase. Nicolas explica muy bien

Buena clase