tengo 2 modelos
Book: id, name, data (json)Author: id, name Quiero extender el modelo de Book con el author del método que devuelve el autor cuando se consulta withRelated . Esto podría ser fácil de lograr con el siguiente fragmento, siempre que tenga author_id en Book
const Book = bookshelf.model('Book', { tableName: 'books', author() { return this.belongsTo('Author', 'author_id', 'id') } }) Pero el problema es que author_id es una propiedad de los data (que es de tipo json). Probé el fragmento a continuación pero no funcionó
const Book = bookshelf.model('Book', { tableName: 'books', author() { return this.belongsTo('Author', `data->>'author_id'`, 'id') } }) Si no se me permite tener ningún cambio en los modelos de origen, ¿cómo podría obtener el author en este caso? Gracias por adelantado.
Se me ocurrió una solución que funcionó, una combinación un poco complicada de enlace related y de evento
const Book = bookshelf.model('Book', { tableName: 'books', initialize: function() { this.on('fetched', async function(model) { model.set('author_id', (model.get('data') || {}).author_id || null) const author = await model.related('author').fetch() model.set('author', author) }) }, author() { return this.belongsTo('Author') } })