我的数据库模型如下:
雇员驱动一个或零车辆
的车辆可以由一个或多个员工
的车辆驱动有一个模型类型,告诉我们它的燃料类型等。Sequelize:如何做一个WHERE与左外连接表的条件加入
我想sequelize,他们不驾驶车辆去给我拿所有的员工,或者如果他们这样做,则车辆没有柴油。
那么,VehicleID为空或Vehicle.VehicleModel.IsDiesel =假
我当前的代码如下:
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。
编辑:
事实证明,该解决方案是使用要求:假的,如下图所示:
options.include = [{
model: model.Vehicle,
attributes: ['ID', 'ModelID'],
include: [
{
model: model.VehicleModel,
attributes: ['ID', 'IsDiesel']
where: {
IsDiesel: false
},
required: false
}],
required: false
}];
我已经试图把第一个“要求:假”,但我错过了放在内在的一个。我认为这是行不通的,所以我放弃了这种做法。 Dajalmar Gutierrez的回答让我意识到我需要这两项工作。
已解决。非常感谢。我编辑了我的帖子以显示正确的解决方案。您链接到的页面上的关键句子是:“我包含嵌套包含,并且我错过了一个嵌套包含中的require:false子句......设置它使代码工作”。读完之后,我意识到我做了同样的事情。 – Steve