2016-05-19 7 views
0

私はかなり従来のCourseモデルを持っています。私もBookのモデルはありません。それらの間に、私はCourseMaterialモデルを持っています。本棚hasMany()。through()引数は無視されました

私はCourseモデルにCourse.hasMany('Book').through('CourseMaterial')というような設定をしようとしていますが、従来とは違うものがあるため、それぞれのキーを指定する必要があります。テーブルは次のように結合します。

  • coursesテーブルはidです。
  • courseMaterials FKとしての表course_idcourses.idを参照してください。
  • course_materialsテーブルにはidentifierフィールドがあり、ここではISBN値が記載されています。
  • booksテーブルには、course_materials.identifierの値に一致するテーブルisbnがあります。私Courseモデルで

は、私の関係は次のようになります。なぜそれはむしろcourse_materials.idに参加しようとしている

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` 

books: function() { 
    return this.hasMany('Book') 
     .through('CourseMaterial', 'isbn', 'identifier'); 
}, 

生成されたSQLは、三番目のパラメータを無視しているようですcourse_materials.identifierよりも?ドキュメントを誤解していますか?

答えて

0

これはリンクの下のあたりなど、既存の問題です:

https://github.com/tgriesser/bookshelf/issues/673

に第3引数が本棚ライブラリによって無視されます。

ソリューションを使用すると、以下のように各ステップを定義したい方法として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') 
関連する問題