Estoy tratando de usar la función Sequelize ORM que permite hacer referencia a la columna anidada de los modelos incluidos (consulte Sequelize Docs: Complex where cláusulas en el nivel superior ). En los documentos dice que puedo usar la sintaxis $nested.column$ .
Lo siguiente es lo que estaba tratando de hacer:
let where = { memberId }; if (req.query.search) { const like = { [Op.like]: `%${req.query.search}%` }; where = { ...where, [Op.or]: [ { '$bookItem.serial$': like }, { '$bookItem.book.name$': like }, { '$bookItem.book.ISBNCode$': like }, ], }; } const options = { where, include: [ { model: models.BookItem, as: 'bookItem', required: false, include: [ { model: models.Book, as: 'book', attributes, required: false, }, ], }, ], }); const transactions = await models.Borrow.findAll(options);Sin embargo, para el código anterior, recibo el siguiente error:
"Unknown column 'bookItem.serial' in 'where clause'"
¿Qué me estoy perdiendo?
Esquema de base de datos completo: https://dbdiagram.io/d/5e08b6aaedf08a25543f79cb
En la documentación vinculada, los libros no tienen una columna de nombre, cambie $bookItem.book.name$ a $bookItem.book.title$ e intente agregar right: true debajo de required: false para crear una unión interna.
¿ bookitem es una tabla? ¿O una base de datos?
bookItem.serial representa db.tbl o tbl.column
bookItem.book.name solo puede representar db.tbl.column
Dado que bookItem parece ser un nombre de base de datos, serial debe ser un nombre de tabla. En ese punto, "tablename LIKE..." es un error de sintaxis.