2016-06-30 14 views
1

2つのCourseUserモデルの間にManyToMany関係があります。ここでピボットラベリングメソッドと "in"演算子

そして、このような余分な列があるcourse_userという名前のピボットテーブルがあります。

course_id 
user_id 
status 
score 

status列がコース内のユーザーのレジスタの状態を示して整数値を保持します。

特定のユーザーのすべてのコースを特定のcourse_idにフェッチし、そのステータスに含まれている配列値が少なくとも1つ含まれています。

$user->courses() 
    ->where('course_user.course_id', $course->course_id) 
    ->wherePivot('status', 'not in', [1, 3, 10]) 
    ->count() 

しかし、それは動作しませんし、私が期待するものは戻らない。そのために

は、私がこれを書きました。

はさえ、私は正常に動作しないwherePivot方法を示すとnot in SQL演算子を無視して、上記のコードから生成されたSQLを参照してみてください。 sql以下に返される:

"select * from `courses` inner join `course_user` on `courses`.`course_id` = `course_user`.`course_id` where `course_user`.`user_id` = ? and `course_user`.`course_id` = ? and `course_user`.`status` != ? and `courses`.`deleted_at` is null" 

問題とはどのように解決できますか?

答えて

1

whereNotIn方法

そのような何かを試してみてください:

$user->courses() 
    ->where('course_user.course_id', $course->course_id) 
    ->whereNotIn('status', [1, 3, 10]) 
    ->count() 
1

ユーザーモデル

パブリック関数のコース(){の$ this - > hasManyの( 'コース'、 'USER_ID')を返す;}で関係を作る

作りますCourseUserモデルにおける関係

パブリック関数のユーザー(){の$ this - を返す> belongsToの( 'ユーザ'、 'USER_ID');}

今()

{{する$ user->コースこのように、この関係を呼び出す - > whereNotIn( '状態'、[1,3,10]) - >()を取得} }

は、それが動作ホープ:)