外键约束

This commit is contained in:
Last 2025-03-08 02:27:27 +08:00
parent 5d526b3a67
commit 5126444ef9
2 changed files with 28 additions and 21 deletions

View File

@ -18,8 +18,11 @@ export default defineEventHandler(async event => {
if (query.archive) { if (query.archive) {
query.archive = query.archive === 'true' query.archive = query.archive === 'true'
} }
const include = [{
return await event.context.db.Blog.findAll({ where: query, order }).then(list => { model: event.context.db.User,
attributes: ['id', 'name', 'avatar']
}]
return await event.context.db.Blog.findAll({ where: query, order, include }).then(list => {
const regex = /<code\s+class="(.*)"\s*>([\s\S]*?)<\/code>/g; const regex = /<code\s+class="(.*)"\s*>([\s\S]*?)<\/code>/g;
return list.map(item => ({ return list.map(item => ({
...item.dataValues, ...item.dataValues,

View File

@ -12,7 +12,7 @@ export default defineNitroPlugin(nitro => {
}) })
// 定义数据模型 // 定义数据模型
const User = db.define('User', { const User = db.define('user', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true }, id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: { type: STRING, allowNull: false }, name: { type: STRING, allowNull: false },
avatar: { type: STRING, allowNull: true }, avatar: { type: STRING, allowNull: true },
@ -23,49 +23,53 @@ export default defineNitroPlugin(nitro => {
updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() } updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() }
}) })
const Session = db.define('Session', { const Session = db.define('session', {
id: { type: STRING, primaryKey: true }, id: { type: STRING, primaryKey: true },
user_id: { type: INTEGER, allowNull: false }, user_id: { type: INTEGER, allowNull: false, references: { model: User, key: User.id } },
ip: { type: STRING, allowNull: false }, ip: { type: STRING, allowNull: false },
ua: { type: STRING, allowNull: false }, ua: { type: STRING, allowNull: false },
createdAt: { type: DATE, allowNull: false, defaultValue: new Date() }, createdAt: { type: DATE, allowNull: false, defaultValue: new Date() },
updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() } updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() }
}) })
const Avatar = db.define('Avatar', { const Avatar = db.define('avatar', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true }, id: { type: INTEGER, primaryKey: true, autoIncrement: true },
user_id: { type: INTEGER, allowNull: false }, user_id: { type: INTEGER, allowNull: false, references: { model: User, key: User.id } },
url: { type: STRING, allowNull: false }, url: { type: STRING, allowNull: false },
createdAt: { type: DATE, allowNull: false, defaultValue: new Date() }, createdAt: { type: DATE, allowNull: false, defaultValue: new Date() },
updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() } updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() }
}) })
const Blog = db.define('Blog', { const Blog = db.define('blog', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true }, id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: { type: STRING, allowNull: false }, name: { type: STRING, allowNull: false },
content: { type: STRING, allowNull: false }, content: { type: STRING, allowNull: false },
user_id: { type: INTEGER, allowNull: false, defaultValue: 1 }, user_id: { type: INTEGER, allowNull: false, references: { model: User, key: User.id } },
archive: { type: BOOLEAN, defaultValue: false }, archive: { type: BOOLEAN, defaultValue: false },
createdAt: { type: DATE, allowNull: false, defaultValue: new Date() }, createdAt: { type: DATE, allowNull: false, defaultValue: new Date() },
updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() } updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() }
}) })
const Gallery = db.define('Gallery', { const Gallery = db.define('gallery', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true }, id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: { type: STRING, allowNull: false }, name: { type: STRING, allowNull: false },
description: { type: STRING, defaultValue: '' }, description: { type: STRING, allowNull: false, defaultValue: '' },
path: { type: STRING }, path: { type: STRING, allowNull: false },
width: { type: INTEGER }, width: { type: INTEGER, allowNull: false },
height: { type: INTEGER }, height: { type: INTEGER, allowNull: false },
format: { type: STRING }, format: { type: STRING, allowNull: false },
mimetype: { type: STRING }, mimetype: { type: STRING, allowNull: false },
size: { type: INTEGER }, size: { type: INTEGER, allowNull: false },
user_id: { type: INTEGER }, user_id: { type: INTEGER, allowNull: false, references: { model: User, key: User.id } },
nsfw: { type: BOOLEAN, defaultValue: false }, nsfw: { type: BOOLEAN, allowNull: false, defaultValue: false },
createdAt: { type: DATE, defaultValue: new Date() }, createdAt: { type: DATE, allowNull: false, defaultValue: new Date() },
updatedAt: { type: DATE, defaultValue: new Date() } updatedAt: { type: DATE, allowNull: false, defaultValue: new Date() }
}) })
// 定义关联
User.hasMany(Blog, { foreignKey: 'user_id' }) // 一个用户有多篇文章
Blog.belongsTo(User, { foreignKey: 'user_id' }) // 一篇文章属于一个用户
// 同步数据模型 // 同步数据模型
db.sync({ alter: true, logging: false }) db.sync({ alter: true, logging: false })