gpt4 book ai didi

javascript - Sequelize : how to do a WHERE condition on joined table with left outer join

转载 作者:IT老高 更新时间:2023-10-28 23:08:10 24 4
gpt4 key购买 nike

我的数据库模型如下:
一名员工驾驶一辆或零辆汽车
一辆车可由一名或多名员工驾驶
车辆有一个模型类型,可以告诉我们它的燃料类型等等。

Picture of database diagram

我想在他们不开车的情况下将所有员工接回给我,或者如果他们开车,那么车辆不是柴油车。
因此,VehicleID 为 null 或 Vehicle.VehicleModel.IsDiesel = false

我目前的代码如下:

var employee = sequelize.define('employee', {
ID: Sequelize.INTEGER,
VehicleID: Sequelize.INTEGER
});

var vehicle = sequelize.define('vehicle', {
ID: Sequelize.INTEGER,
ModelID: Sequelize.INTEGER
});

var vehicleModel = sequelize.define('vehicleModel', {
ID: Sequelize.INTEGER,
IsDiesel: Sequelize.BOOLEAN
});

employee.belongsTo(vehicle);
vehicle.belongsTo(vehicleModel);

如果我运行以下命令:

options.include = [{
model: model.Vehicle,
attributes: ['ID', 'ModelID'],
include: [
{
model: model.VehicleModel,
attributes: ['ID', 'IsDiesel']
}]
}];

employee
.findAll(options)
.success(function(results) {
// do stuff
});

Sequelize 执行左外连接以获取包含的表。所以我找到了会开车和不开车的员工。
只要我在选项中添加位置:

options.include = [{
model: model.Vehicle,
attributes: ['ID', 'ModelID'],
include: [
{
model: model.VehicleModel,
attributes: ['ID', 'IsDiesel']
where: {
IsDiesel: false
}
}]
}];

Sequelize 现在执行内部连接以获取包含的表。
这意味着我只聘请驾驶车辆且车辆不是柴油的员工。不开车的员工被排除在外。

从根本上说,我需要一种方法来告诉 Sequelize 进行左外连接,同时有一个 where 条件表明连接表中的列为 false 或 null。

编辑:

原来解决办法是使用required:false,如下:

options.include = [{
model: model.Vehicle,
attributes: ['ID', 'ModelID'],
include: [
{
model: model.VehicleModel,
attributes: ['ID', 'IsDiesel']
where: {
IsDiesel: false
},
required: false
}],
required: false

}];

我已经尝试过放置第一个 'required:false' 但我错过了放置内部的。我认为它不起作用,所以我放弃了这种方法。 Dajalmar Gutierrez 的回答让我意识到我需要两者才能正常工作。

最佳答案

当您添加 where 子句时,sequelize 会自动将 required: true 子句添加到您的代码中。

required: false 添加到包含段应该可以解决问题

注意:您应该检查此问题 iss4019

关于javascript - Sequelize : how to do a WHERE condition on joined table with left outer join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39658204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com