Sequelize - 仅包括找到一个结果

Posted

技术标签:

【中文标题】Sequelize - 仅包括找到一个结果【英文标题】:Sequelize - Includes Only Finding One Result 【发布时间】:2019-03-07 16:03:15 【问题描述】:

什么:

Films 表和 Credits 表,具有 一对多 关系。 我正在对 Film 和 Credits 运行 findAll 查询。

 

问题:我应该得到大约 20 个信用,我只得到 1 个。

 

编辑问题:我将 LIMIT 设置为 20(我在数据库中有 28 个)。我仍然每部电影获得 1 个学分,但我没有获得 20 部电影……有时是 12 部电影,有时是 16 部电影。不一致。

 


电影模特

module.exports = (sequelize, DataTypes) => 

  const Film = sequelize.define('Film', 
    name:  type: DataTypes.STRING, allowNull: false ,
    description:  type: DataTypes.STRING, allowNull: false 
  ,

  
    freezeTableName: true
  );


  Film.associate = (models) => 
    Film.hasMany(models.Credit,  foreignKey: 'film_id', as: 'credits' );
  ;

  return Film;
;

信用模型

module.exports = (sequelize, DataTypes) => 

  const Credit = sequelize.define('Credit', 
    film_id:  type: DataTypes.INTEGER, allowNull: false ,
    name:  type: DataTypes.STRING 
  ,

  
    freezeTableName: true
  );


  Credit.associate = (models) => 
    Credit.belongsTo(models.Film,  foreignKey: 'film_id', onDelete: 'CASCADE' );

  return Credit;
;

查询

Film.findAll( 
    subQuery: false,
    order: sequelize.literal('rand()'),
    limit: 20,
    include: [
       model: Credit, as: "credits", required: true, all: true 
    ],
   )

【问题讨论】:

是因为limit: 1属性吗? 我认为你是正确的@Cat 我正在进一步阅读它,但是关于设置 findAll 限制的一些事情使它表现得像这样。如果我没有限制,一切正常。 【参考方案1】:

向 FindAll 的外部查询添加 LIMIT 也会限制包含结果的数量。

虽然起初令人困惑,但这是预期的功能。

【讨论】:

以上是关于Sequelize - 仅包括找到一个结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 sequelize 可以进行 TRANSACTION 吗?

使用把手显示来自 sequelize 查询的值

使用 Typescript 在 Sequelize 模型中创建实例方法

为啥 Sequelize 在 3120 条记录后会暂停?

kenx JS 和 Sequelize 有啥区别?

更改数据库模型 - Sequelize