Relaciones Uno a Muchos en API Rest con SQLite
Clase 19 de 27 • Curso de Backend con Node.js: Base de Datos con PostgreSQL
Resumen
¿Cómo crear una nueva categoría en SQLite?
Iniciamos con la lógica de creación de categorías utilizando SQLite. La clave es importar los modelos correctos desde nuestra librería interna y usar métodos asíncronos para gestionar las operaciones de base de datos.
// Importamos los modelos desde la librería SQLite
const { models } = require('libs/sqlite-lib');
// Función para crear una nueva categoría
async function createCategory(data) {
const newCategory = await models.Category.create(data);
return newCategory;
}
Este simple fragmento de código permite la creación de una categoría y asegura que todas las validaciones en el esquema se cumplen, requiriendo un nombre y una imagen para completarse exitosamente.
¿Cómo crear un producto y manejar relaciones uno a muchos?
Para gestionar la creación de productos y establecer las relaciones de uno a muchos, primero integramos nuestro modelo de productos.
// Lógica para crear nuevos productos y establecer relaciones
const { models } = require('libs/sqlite-lib');
async function createProduct(data) {
const newProduct = await models.Product.create(data);
return newProduct;
}
¿Qué ajustes son necesarios en el esquema?
El esquema del producto debe incluir una referencia al ID de la categoría para establecer la relación. Aquí es donde especificamos que un producto debe pertenecer a una categoría en específico.
const productSchema = {
name: 'string',
price: 'integer',
description: 'string',
categoryId: 'integer', // Hace referencia a la categoría
};
¿Cómo consultar productos y categorías con asociaciones?
Una parte vital es consultar los elementos con sus asociaciones correctas. Para ello, hacemos uso de los métodos de búsqueda incorporados:
¿Cómo buscar productos con sus categorías?
async function getProducts() {
const products = await models.Product.findAll({
include: [{
model: models.Category,
as: 'category'
}]
});
return products;
}
¿Cómo buscar una categoría y sus productos?
Este método muestra cómo obtener una categoría particular y todos los productos asociados a ella.
async function getCategoryWithProducts(categoryId) {
const category = await models.Category.findByPk(categoryId, {
include: [{
model: models.Product,
as: 'products'
}]
});
return category;
}
¿Cuál es el proceso para consultar y obtener un resumen detallado?
- Consulta general de productos: Devuelve productos con sus categorías gracias a la inclusión de asociaciones.
- Consulta general de categorías: Devuelve solo categorías, sin detalles adicionales de productos, para operaciones ligeras.
- Detalle de categoría específica: Cuando se necesita el desglose de un producto, se efectúa una búsqueda más profunda que incluye todos sus productos usando
includes: products
.
Con estos pasos, es posible gestionar múltiples relaciones uno a muchos, permitiendo crear un flujo de datos más eficiente y coherente dentro de una aplicación en desarrollo. Mantente atento para aprender a manejar relaciones más complejas como son las de muchos a muchos.