No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
20 Hrs
4 Min
31 Seg

Resolviendo relaciones uno a muchos

19/27
Recursos

Aportes 17

Preguntas 17

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 “rolsId” 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

bua me encanta lo util y realizta que es el curso

este curso es excelente

Me aparece este error al crear una categoría:
ValidationErrorItem {
message: ‘Category. id cannot be null’,
type: ‘notNull Violation’,
.
cuanlo lo solucione les comparto cual fue la solución.

  • 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

Este curso hasta el momento me ha tomado bastante tiempo llegar a esta clase. He tenido un sin numero de inconvenientes al realizarlo, ya sea porque las versiones de la dependencias están muy actualizadas, o que algunas ya no se usan. pero sin duda me ha ayudado a combatir ese sindrome del impostor ya que he buscado alternativas y es gratificante ver que aunque no sea de la misma forma puedo hacer correr el proyecto. un curso realmente Avazando que me hace ver que todo el tiempo que dedique a la ruta de desarrollo web esta dando provecho. Nunca dejen de aprender compañeros!

en la terminal corremos el comand: npm docs sequelize // ahí te abre la documentacion de como implementar las querys, no solo como el profe muestra en la clase, es importante curiosear y crear consultas que cotidianamente nos encontraríamos.

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

Yo recuerdo que platzi tenía un apartado de apuntes dentro de la plataforma, pero ya no la veo, la quitaron

Quiten de name llave primaria!

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