序列化-仅包含找到一个结果

时间:2019-03-07 16:03:15

标签: javascript orm sequelize.js

内容:

  • 电影表和信用表,并具有一对多关系。
  • 我正在Film上运行findAll查询,包括Credits。

问题:我应该得到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 }
    ],
  } )

1 个答案:

答案 0 :(得分:0)

在FindAll的外部查询中添加一个LIMIT也将限制所包含结果的数量。

虽然一开始令人困惑,但这是预期的功能。