- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在开发一款用于管理公司分支机构和员工的应用程序,使用 NodeJS、MSSQL 和 Sequilize 作为 ORM。
要求以一种我们可以“返回”过去的日期并查看公司在该特定时间点的状态的方式来跟踪某些变化。为此,我们使用时间戳(initDate
和 endDate
)来跟踪我们关心的更改,即分支机构的更改以及员工在不同部门之间的移动。活跃的分支机构。每次更改记录时,我们都会将其 endDate
设置为 now()
并使用更改和 endDate = null
创建一条新记录,因此每个分支或分支-员工关系的“当前”版本是 endDate IS NULL
的版本。
我们现在使用 Sequelize 面临的问题是:当我们的员工使用 findAll()
时,我们如何为分支员工关系指定 endDate
-加载(即包含
)他们的分支?在下面的示例中,我正在查询公司的“当前”状态,因此我要求 endDate: null
,但这实际上是一个表示我们想要的时间点的参数。
非常感谢您的帮助。任何见解将不胜感激!
--- 这里我包括模型定义和查询 ---
分支模型定义:
var BranchModel = db.define<BranchInstance, Branch>('Branch', {
IdBranch: {
primaryKey: true,
type: DataTypes.INTEGER
},
Name: DataTypes.STRING,
// ... other fields ...
initDate: DataTypes.DATE,
endDate: DataTypes.DATE
}, {
timestamps: false,
classMethods: {
associate: function (models) {
Branch.belongsToMany(models.model('Employee'), {
through: {
model: models.model('Branch_Employee')
},
as: 'Employees',
foreignKey: 'branchId'
});
// ... other associations ..
}
}
});
员工模型定义:
var EmployeeModel = db.define<EmployeeInstance, Employee>('Employee', {
idEmployee: {
primaryKey: true,
type: DataTypes.INTEGER
},
Name: DataTypes.STRING,
// ... other fields ...
active: DataTypes.BOOLEAN
}, {
timestamps: false,
defaultScope: {
where: {
active: true
}
},
classMethods: {
associate: function (models) {
EmployeeModel.belongsToMany(models.model('Branch'), {
through: {
model: models.model('Branch_Employee')
},
foreignKey: 'employeeId'
});
// ... other associations ...
}
}
});
连接表定义:
var Branch_Employee = db.define<BranchEmployeeInstance, BranchEmployee>('Branch_Employee', {
branchId: DataTypes.INTEGER,
employeeId: DataTypes.INTEGER
// ... some other attributes of the relation ...
initDate: DataTypes.DATE,
endDate: DataTypes.DATE,
}, {
timestamps: false,
classMethods: {
associate: function(models) {
Branch_Employee.belongsTo(models.model('Employee'), {
as: 'Employee',
foreignKey: 'employeeId'
});
Branch_Employee.belongsTo(models.model('Branch'), {
as: 'Branch',
foreignKey: 'branchId'
});
}
},
instanceMethods: {
// ... some instance methods ...
}
});
序列化查询以获取每个活跃员工,急切地加载与他们相关的分支:
let employees = await EmployeeModel.findAll({
logging: true,
include: [{
model: Branch,
as: 'Branches',
where: {
endDate: null, // this would be [Branches].[endDate] IS NULL
// i also need the generated query to include:
// [Branches.Branch_Employee].[endDate] IS NULL
},
required: false
}]
});
为上述查询生成的 SQL 如下所示:
SELECT [Employee].[idEmployee]
,[Employee].[Name]
,[Employee].[active]
,[Branches].[IdBranch] AS [Branches.IdBranch]
,[Branches].[Name] AS [Branches.Name]
,[Branches].[initDate] AS [Branches.initDate]
,[Branches].[endDate] AS [Branches.endDate]
,[Branches.Branch_Employee].[initDate] AS Branches.Branch_Employee.initDate]
,[Branches.Branch_Employee].[endDate] AS [Branches.Branch_Employee.endDate]
,[Branches.Branch_Employee].[branchId] AS Branches.Branch_Employee.branchId]
,[Branches.Branch_Employee].[employeeId] AS [Branches.Branch_Employee.employeeId]
FROM [Employee] AS [Employee]
LEFT OUTER JOIN (
[Branch_Employee] AS [Branches.Branch_Employee]
INNER JOIN [Branch] AS [Branches]
ON [Branches].[IdBranch] = [Branches.Branch_Employee].[branchId]
) ON [Employee].[idEmployee] = [Branches.Branch_Employee].[employeeId]
AND [Branches].[endDate] IS NULL
WHERE [Employee].[active] = 1;
但是,我实际上需要进一步限制结果集,使其仅包含“当前”分支-员工关系,即类似:
[Branches.Branch_Employee].[endDate] IS NULL
最佳答案
我应该对 Sequelize 文档给予更多的信任,因为通常情况下,它有答案。我将其包括在内,以防其他人遇到这个特定问题:
来自 Sequelize doc ,findAll(options)
函数接受以下选项:
[options.include[].through.where]
Object Filter on the join model for belongsToMany relations.
这正是我所需要的!希望这会有所帮助。
关于sql - Sequelize : Including join table attributes in findAll include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834331/
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: what is the difference between #include and #include “fi
我想使用 #include 指令,其文件名作为外部定义的宏传递。 例如 #include #FILE".h" 其中 FILE 将被定义为字符串 MyFile(不带引号),结果为 #include "M
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我想在当前目录及其子目录下的每个 .m 文件中查找所有出现 ncread 的情况。我使用以下命令: grep -R --include="\.m" ncread . 但是该命令没有返回任何内容。 gr
有时我会遇到这样的情况,我发现我需要为大型第三方文件制作一个#include,这样我才能使用一个函数或一个小类,这让我感到内疚,因为我知道这已经消失了增加我的编译时间,因为当我只想要一个功能时它会编译
这个问题在这里已经有了答案: 关闭13年前. Possible Duplicate: what is the difference between #include and #include “fi
我正在尝试通过应用程序加载器提交应用程序。我收到这个错误。但我已经检查了build设置,所有三种架构都包含在有效架构设置中。 最佳答案 断开任何设备,只保留“iOS 设备”中的选项并将其存档。 关于i
Please check this demo plunker更好地理解我的问题。 在我的主页上有一个表格。每个表行后面都有一个最初隐藏的空行。单击第一行时,我使用指令在其下方的空行中注入(inject
我正在使用 mkdocs 创建 html 网页和片段扩展以将我的主文档分成小块。我有一个难以理解的错误: 在我制作的文件file1.md中: --8<-- includes/some_rep/frag
include的推荐方式是什么?您项目的所有文件? 我见过很多使用类似结构的例子: include 的有序列表单个顶级文件(定义 Module 的文件,或应用程序中的“主”文件)中的语句。 这似乎也是
我想知道如何使用 fx:include与 JavaFX Scene Builder 结合使用,因此: 想象我有一个 BorderPane (文件 borderpane.fxml)。在中间部分我想放一个
我看到 Fortran 有“调用”和“包含”语句。两者有什么区别? .i 文件类型有什么意义吗? 即: include 'somefile.i' call 'somesubroutine.f' 谢谢!
这很挑剔,可能没有任何实际用途。我只是好奇... 在 C++20 工作草案 (n4861) 中, header 名称定义为: (5.8) header-name: " q-char-
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: What is the difference between #include and #include “fil
我有一个非常庞大且臃肿的类,我想将它拆分成单独的文件,但它应该对用户完全透明并且与使用该类的现有项目兼容。 特别是,我有自己的 ImageMatrix 类,它定义了大量的一元函数、大量带有标量的二元函
我是 grep 的新手,在重构 C 和 C++ 文件的过程中,我遇到了替换系统的问题,包括 #include <>与本地包括 #include "" . 有没有一种方法可以将 grep 与任何替代工具
我正在制作一个 Spring MVC web 项目,我必须有一个常量 header 。 我的基本要求是“我们希望在所有屏幕上都有一个标题,以显示谁登录了 ProjectA。” 我从这里“What is
在 SWIG 中,“%include”指令与标准 C“#include”有什么区别? 例如,在所有教程中,为什么它们通常看起来像这样: %module my_module %{ #include "M
假设我们有这个头文件: MyClass.hpp #pragma once #include class MyClass { public: MyClass(double); /* .
我已经在一个项目上工作了一段时间,该项目实现了一个使用 C 库的自定义框架。该框架是用 Swift 编写的,我创建了一个模块来向 Swift 公开 C 头文件。该框架是在不同的项目中启动的,然后将该框
我是一名优秀的程序员,十分优秀!