【发布时间】:2022-01-29 03:33:22
【问题描述】:
我正在搜索 Captain.entry_date,但我无法在 sequelize 模型中创建查询。
我的问题是,对于任何船都存在船长,但 ship_captain.captain_id 有时为空。
对于这种情况,可以找到有关 route_id 的船长。
4 Tables :
ship, attributes:[id,name],
captain, attributes: [id, name, route_id, route_date]
ship_captain, attributes: [id, ship_id, route_id, captain_id]
route, attributes: [id, name]
select ship.name, c.name, c.entry_date
from ship left join ship_captain sc on ship.id = sc.ship_id
left join captain c on c.id = sc.captain_id or c.route_id = sc.route_id
到目前为止我尝试过的是这样,但我不能将 OR 运算符加入到最后的连接中
Ship.hasMany(ShipCaptain, {foreignKey: "ship_id"});
ShipCaptain.belongsTo(Ship, {foreignKey: "ship_id"});
Captain.hasMany(ShipCaptain, {as: "ship_captain_by_id", foreignKey: "captain_id"});
ShipCaptain.belongsTo(Captain, {as: "ship_captain_by_route", foreignKey: "captain_id"});
Captain.hasMany(ShipCaptain, {as: "ship_captain_by_route", foreignKey: "route_id"});
ShipCaptain.belongsTo(Captain, {as: "ship_captain_by_route", foreignKey: "route_id"});
const options = {
attributes: ["name"],
include: [
{
model: Captain,
as: 'ship_captain_per_id',
required: false,
attributes: ["name","route_date"],
},
{
model: Captain,
as: 'ship_captain_per_route',
required: false,
attributes: ["name","route_date"],
}
],
}
const elements = await Ship.findAll(options);
这只是一个示例代码,可能是你想重新排列 db 属性
但我尽力澄清问题。我无法更改客户数据库。
【问题讨论】:
标签: node.js sequelize.js