我的數據庫模型如下:
僱員驅動一個或零車輛
的車輛可以由一個或多個員工
的車輛驅動有一個模型類型,告訴我們它的燃料類型等。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