wherePivot laravel方法和“in”运算符

时间:2016-06-30 06:35:25

标签: php laravel

我有两个CourseUser模型,它们之间存在ManyToMany关系。

并且有一个名为course_user的数据透视表,其中包含这样的额外列:

course_id
user_id
status
score

status列包含一个整数值,显示课程中用户的注册状态。

现在我想获取具有特定course_id的特定用户的所有课程,并且其状态包含至少一个数组值。

为此我写了这个:

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

但这不起作用,也不能恢复我的期望。

即使我尝试从上面的代码中看到生成的sql显示 wherePivot 方法无法正常工作并忽略not in 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"

什么是问题,我该如何解决?

2 个答案:

答案 0 :(得分:1)

在用户模型中建立关系

  

公共职能课程(){return $ this-> hasMany('Course','user_id');}

在CourseUser模型中建立关系

  

公共职能用户(){return $ this-> belongsTo('User','user_id');}

现在以这种方式调用此关系

{{$用户>课程() - > whereNotIn( '状态',[1,3,10]) - >得到()}}

希望它有效:)

答案 1 :(得分:1)

尝试使用$user->courses() ->where('course_user.course_id', $course->course_id) ->whereNotIn('status', [1, 3, 10]) ->count() 方法

类似的东西:

registerJs()