javascript - sequelize - typeorm
¿Qué ORM para node.js? (2)
Bookshelf debería admitir todos esos:
- La asignación de columnas a nombres de propiedades con los métodos de format y parse .
- Usando un nombre de tabla diferente con el atributo tableName .
- La marca de tiempo puede tomar columnas personalizadas con el atributo hasTimestamp .
- Las claves foráneas se pueden definir con el generador de esquemas de Knex ... no están bien documentadas, pero puede ver un ejemplo en las pruebas here
- Soporta mysql, sqlite y postgres
Definitivamente admite un modelo por archivo ... las relaciones se definen en métodos, por lo que puede hacer:
var Classroom = Bookshelf.Model.extend({ tableName: ''classrooms'', student: function() { // Relating to a model from a file in the same directory. return this.hasMany(require(''./student'')); } }); new Classroom({id: 1}) .fetch({withRelated: [''students'']) .then(function(classroom) { console.log(JSON.stringify(classroom)); });
El soporte oficial de eliminación de software está en proceso, pero definitivamente se logra extendiendo el modelo y proporcionando un nuevo método de destrucción como el siguiente:
destroy: function(options) {
if (options.softDelete) {
return this.save({''deleted_at'': new Date});
}
return bookshelf.Model.prototype.destroy.call(this, arguments);
}
Todavía no se engancha en una memoria caché, porque la invalidación de la memoria caché en las relaciones es bastante complicada, definitivamente algo a considerar.
Si ve algo que parece faltar, siéntase libre de abrir un ticket.
Sé que esta es una pregunta común, pero he hecho pruebas y necesito algunas características particulares.
Las características que necesito son:
- mapear propiedades a nombres de columna
- use un nombre de tabla diferente al nombre del modelo
- soporte para borrados suaves (modo paranoico en la secuela)
- Compatibilidad con la marca de tiempo de registro (con la capacidad de especificar, para cada modelo diferente, el nombre de la columna)
- soporte para llaves foráneas
- debe soportar mysql y sqlite
- La arquitectura debe soportar un modelo por archivo.
Características opcionales:
- caché (soporte para redis / memcache)
- Herramienta de línea de comandos para generar modelos desde la base de datos.
He probado:
- nodo-orm
- para manejar los propios nombres de columna necesita una solución
- las eliminaciones de software no son compatibles y no se pueden admitir incluso con un complemento externo (intenté escribir uno usando el enlace anterior Quitar, pero puedo "detenerlo" de eliminar el registro)
- no es compatible con un modelo por archivo (necesita una solución)
- secuela
- no crear claves externas
- no se pueden asignar propiedades a nombres de columna
- admite un modelo por archivo, pero no funciona muy bien (es necesario colocar una relación en el archivo que incluya los modelos)
- persistencia de nodo
- No me gusta la necesidad de especificar la instancia de conexión para todo.
Ahora mismo voy a probar JugglingDB y Bookshelf.js (pero no me gusta mucho el último).
Puede echar un vistazo a light-orm: https://github.com/knyga/light-orm ORM simple. No cree claves externas. No se pueden asignar propiedades a los nombres de columna. Pero podría estar conectado a cualquier rdbms, y super simple.