Sequelize.js Sequelize:查找没有关联的条目
鉴于以下简单模型:Sequelize.js Sequelize:查找没有关联的条目,sequelize.js,Sequelize.js,鉴于以下简单模型: class A extends Model {} A.init({ aField: DataTypes.STRING, }, { sequelize }); class B extends Model {} B.init({ bField: DataTypes.STRING, }, { sequelize }); A.hasMany(B); // this creates the B.AId column // populate await A.cr
class A extends Model {}
A.init({
aField: DataTypes.STRING,
}, { sequelize });
class B extends Model {}
B.init({
bField: DataTypes.STRING,
}, { sequelize });
A.hasMany(B); // this creates the B.AId column
// populate
await A.create({
aField: 'fooA',
Bs: [{ bField: 'fooB' }]
}, { include: [B] });
await A.create({ aField: 'barA' });
await A.create({ aField: 'bazA' });
我不知道如何选择没有B项的第一个A模型实例。
在上一个案例中,返回的只是barA和bazA
以下操作不起作用,它返回foo:
生成的查询是:选择A.*,Bs.id作为Bs.id,Bs.bField作为Bs.bField,Bs.AId作为Bs.AId从选择A.id,A.affield从AS作为限制1作为左外部连接Bs作为Bs在A.id=Bs.AId上,Bs.AId为空这是限制和关联的问题。类似问题: Sequelize将关联转换为子查询,但在您的用例中,您需要一个关联,然后限制整个关联结果。 为此,可以使用subQuery:false禁用子查询 等一等{ 包括:[{ 型号:B, 必填项:false, 其中:{ “AId”:null, } }], 子查询:false }; 这仍然无法实现您想要的,因为where in include将生成和条件ON 生成的查询: 选择'A`.'id`、'A`.'aField`、'A`.'createdAt`、'A`.'updatedAt`、'Bs`.'id`作为'Bs.id`, `Bs`.`bField`作为`Bs.bField`,`Bs`.`createdAt`作为`Bs.createdAt`, `Bs`.`updatedAt`AS`Bs.updatedAt`、`Bs`.`AId`AS`Bs.AId` 从'As'到'A' 左外连接'Bs'作为'A'上的'Bs'。'id`='Bs`.'AId`和'Bs`.'AId`为空 限值1; 你想要的是 ... ... 在'A`.'id`='Bs`.'AId`上,其中'Bs`.'AId`为空 限值1; 为了得到WHERE,你可以把WHERE子句放在A中 等一等{ 包括:[{ 型号:B, 必填项:false }], 其中:{ “$Bs.AId$”:null }, 子查询:false };
你希望巴拉和巴扎都回来吗?还是只有barA?是的,使用findAll,但这里我只希望得到一个入口谢谢,这很好!我找不到子查询的文档,你有指针吗?我也找不到好的文档。我只是从一些github问题或stackoverflow中知道子查询。很抱歉但我很高兴听到这个消息。
await A.findOne({
include: [{
model: B,
required: false,
where: {
'AId': null,
}
}],
});