mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
sequelize association test
This commit is contained in:
92
rootfs_overlay/lkmc/nodejs/sequelize/association.js
Executable file
92
rootfs_overlay/lkmc/nodejs/sequelize/association.js
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
|
||||
const { Sequelize, DataTypes } = require('sequelize');
|
||||
|
||||
const sequelize = new Sequelize({
|
||||
dialect: 'sqlite',
|
||||
storage: 'tmp.' + path.basename(__filename) + '.sqlite',
|
||||
});
|
||||
(async () => {
|
||||
const Comment = sequelize.define('Comment', {
|
||||
body: { type: DataTypes.STRING },
|
||||
}, {});
|
||||
const User = sequelize.define('User', {
|
||||
name: { type: DataTypes.STRING },
|
||||
}, {});
|
||||
User.hasMany(Comment)
|
||||
Comment.belongsTo(User)
|
||||
await sequelize.sync({force: true});
|
||||
const u0 = await User.create({name: 'u0'})
|
||||
const u1 = await User.create({name: 'u1'})
|
||||
await Comment.create({body: 'u0c0', UserId: u0.id});
|
||||
await Comment.create({body: 'u0c1', UserId: u0.id});
|
||||
await Comment.create({body: 'u1c0', UserId: u1.id});
|
||||
|
||||
// Direct way.
|
||||
{
|
||||
const u0Comments = await Comment.findAll({
|
||||
where: { UserId: u0.id },
|
||||
order: [['id', 'ASC']],
|
||||
});
|
||||
assert(u0Comments[0].body === 'u0c0');
|
||||
assert(u0Comments[1].body === 'u0c1');
|
||||
assert(u0Comments[0].UserId === u0.id);
|
||||
assert(u0Comments[1].UserId === u0.id);
|
||||
// Not added as an object by default. Would require extra query.
|
||||
assert(u0Comments[0].User === undefined);
|
||||
assert(u0Comments[1].User === undefined);
|
||||
}
|
||||
|
||||
// Include data from the other side of the association in the query.
|
||||
{
|
||||
const u0Comments = await Comment.findAll({
|
||||
where: { UserId: u0.id },
|
||||
order: [['id', 'ASC']],
|
||||
include: [{ model: User }],
|
||||
});
|
||||
assert(u0Comments[0].body === 'u0c0');
|
||||
assert(u0Comments[1].body === 'u0c1');
|
||||
assert(u0Comments[0].UserId === u0.id);
|
||||
assert(u0Comments[1].UserId === u0.id);
|
||||
// These did get added now.
|
||||
assert(u0Comments[0].User.name === 'u0');
|
||||
assert(u0Comments[1].User.name === 'u0');
|
||||
}
|
||||
|
||||
// Nicer higher level way.
|
||||
{
|
||||
const u0Comments = await u0.getComments({
|
||||
include: [{ model: User }],
|
||||
});
|
||||
assert(u0Comments[0].body === 'u0c0');
|
||||
assert(u0Comments[1].body === 'u0c1');
|
||||
assert(u0Comments[0].User.name === 'u0');
|
||||
assert(u0Comments[1].User.name === 'u0');
|
||||
}
|
||||
|
||||
// No way to create new item with association without explicit foreign key??
|
||||
// https://stackoverflow.com/questions/34059081/how-do-i-reference-an-association-when-creating-a-row-in-sequelize-without-assum
|
||||
// This does not work as we would like:
|
||||
{
|
||||
await Comment.create({body: 'u0c2', User: u0});
|
||||
// We'd want 3 here.
|
||||
assert((await Comment.findAll({
|
||||
where: { UserId: u0.id },
|
||||
})).length === 2);
|
||||
}
|
||||
|
||||
// Removal auto-cascades.
|
||||
const u0id = u0.id
|
||||
await u0.destroy()
|
||||
assert((await Comment.findAll({
|
||||
where: { UserId: u0id },
|
||||
})).length === 0);
|
||||
assert((await Comment.findAll({
|
||||
where: { UserId: u1.id },
|
||||
})).length === 1);
|
||||
|
||||
await sequelize.close();
|
||||
})();
|
||||
@@ -11,6 +11,7 @@
|
||||
// ``
|
||||
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
|
||||
const { Sequelize, DataTypes } = require('sequelize');
|
||||
|
||||
@@ -29,7 +30,7 @@ const { Sequelize, DataTypes } = require('sequelize');
|
||||
//});
|
||||
const sequelize = new Sequelize({
|
||||
dialect: 'sqlite',
|
||||
storage: 'tmp.sequelize.sqlite',
|
||||
storage: 'tmp.' + path.basename(__filename) + '.sqlite',
|
||||
});
|
||||
|
||||
// OMG fuck this asynchronous bullshit:
|
||||
Reference in New Issue
Block a user