Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sequelize对多对多关联使用左连接而不是嵌套的内部连接_Mysql_Sequelize.js - Fatal编程技术网

Mysql Sequelize对多对多关联使用左连接而不是嵌套的内部连接

Mysql Sequelize对多对多关联使用左连接而不是嵌套的内部连接,mysql,sequelize.js,Mysql,Sequelize.js,我在Sequelize(MySQL)中设置了三个模型——Book、Author和Book_Author(联接表)。我成立了以下协会: Book.belongsToMany(Author, { through: Book_author, foreignKey: 'book_id' } ); Author.belongsToMany(Book, { through: Book_author, foreignKey: 'author_id' } );

我在Sequelize(MySQL)中设置了三个模型——Book、Author和Book_Author(联接表)。我成立了以下协会:

Book.belongsToMany(Author,
  {
    through: Book_author,
    foreignKey: 'book_id'
  }
);
Author.belongsToMany(Book,
  {
    through: Book_author,
    foreignKey: 'author_id'
  }
);
当我尝试对Book模型进行findAll查询时,如下所示

Book.findAll({
    include: [
      { model: Author
      }
    ]
  }).then(bookList => {
    // do something with the bookList
});
…它生成具有以下结构的原始SQL查询(我删除了各个属性以保持简洁):

但是,嵌套的内部联接使我的查询速度变慢。单独测试原始SQL查询时也是如此,因此这不是一个续集问题。为了缓解这种情况,我希望原始SQL查询只使用左连接,如下所示:

SELECT book.*, author.* FROM book
LEFT JOIN book_author
ON book.book_id = book_author.book_id
LEFT JOIN author
ON author.author_id = book_author.author_id;

我需要如何更改Sequelize模型和/或findAll
includes
属性才能获得此结果?我尝试在
includes
属性中使用
required:false
,但这只影响外部联接,而不影响嵌套联接。是否有任何方法可以不使用
sequelize.query
?谢谢你的帮助

您可以使用两个
belongsTo
关联,而不是
belongstomy

Book.hasMany(图书作者);
作者:贝朗斯托(作者);
const bookList=wait Book.findAll({
包括:[{
模特:图书作者,
必填项:false,
包括:[{
模特:作者,
必填项:false
}]
}]
});

你有没有想到这一点?
SELECT book.*, author.* FROM book
LEFT JOIN book_author
ON book.book_id = book_author.book_id
LEFT JOIN author
ON author.author_id = book_author.author_id;