我有一个非常传统的Course
模型。我也有一个Book
模型。在他们之间,我有一个CourseMaterial
模型。
我尝试将Course
模型配置为Course.hasMany('Book').through('CourseMaterial')
,但由于某些非常规内容,我需要指定每个密钥。表格如此加入:
courses
表格有id
。courseMaterials
表格为FK,course_id
引用courses.id
。course_materials
表格中有identifier
字段,出于本讨论的目的,该字段包含ISBN值。books
表格有一个isbn
表格,其值与course_materials.identifier
中的内容相匹配。在我的Course
模型中,我的关系如下:
books: function() {
return this.hasMany('Book')
.through('CourseMaterial', 'isbn', 'identifier');
},
生成的SQL似乎忽略了第三个参数:
SELECT `books`.*,
`course_materials`.`id` AS `_pivot_id`,
`course_materials`.`course_id` AS `_pivot_course_id`
FROM `books`
INNER JOIN `course_materials`
ON `course_materials`.`id` = `books`.`isbn`
为什么要尝试加入course_materials.id
而非加入course_materials.identifier
?我误读了文档吗?
答案 0 :(得分:0)
根据以下链接,这是一个现有问题:
https://github.com/tgriesser/bookshelf/issues/673
因此书架库忽略了第三个参数。
解决方案是使用knex构建自定义SQL,如下所示定义每个步骤:
knex('books').innerJoin('CourseMaterial', 'CourseMaterial.identifier', 'books.isbn')
OR (in case you want to do projection on results)
knex('books').select(['books.id', 'books.bookname'])
.innerJoin('CourseMaterial', 'CourseMaterial.identifier', 'books.isbn')