Laravel 5“belongsToMany`与`wherePivot`雄辩的查询无法正常工作

时间:2016-03-15 05:40:18

标签: php mysql laravel laravel-5 eloquent

假设我有users,coursescourse_users个表,用户属于许多课程,数据透视表course_users的结构如下:

| user_id | course_id | relation_type |
| ---------------------------------------------- - |

现在我有以下代码:

$user = User:find(1);

我在user模型中有以下功能:

public function courses(){
    return $this->belongsToMany('App\Models\Course')->wherePivot('relation_type', 1)->orWherePivot('relation_type', 0)->withPivot('relation_type', 'created_at', 'updated_at');
}

如果我想获得用户的课程:

$user->courses();

但上述函数的输出查询如下:

select 
  `courses`.*, `course_user`.`user_id` as `pivot_user_id`,`course_user`.`course_id` as `pivot_course_id`, 
  `course_user`.`relation_type` as `pivot_relation_type`,`course_user`.`created_at` as `pivot_created_at`, `course_user`.`updated_at` as `pivot_updated_at` 
from 
  `courses` inner join `course_user` on `courses`.`id` = `course_user`.`course_id` 
where 
  `course_user`.`user_id` = '1' and `course_user`.`relation_type` = '0' or `course_user`.`relation_type` = '1';

但我需要这样的事情:

select 
   `courses`.*, `course_user`.`user_id` as `pivot_user_id`, `course_user`.`course_id` as `pivot_course_id`, 
   `course_user`.`relation_type` as `pivot_relation_type`, `course_user`.`created_at` as `pivot_created_at`, `course_user`.`updated_at` as `pivot_updated_at` 
from 
   `courses` inner join `course_user` on `courses`.`id` = `course_user`.`course_id` 
where 
   `course_user`.`user_id` = '1' and (`course_user`.`relation_type` = '0' or `course_user`.`relation_type` = '1');

区别在于where条款。

1 个答案:

答案 0 :(得分:3)

关系上的<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <div class="step1"> step1 <br> <br> <div class="clickverify"> NEXT STEP </div> </div> <div class="step2"> step2 <br> <br> </div>方法只是wherePivot方法的快捷方式,但它负责为约束添加数据透视表限定符。因此,它不支持闭包,这是您为了对约束进行分组而需要使用的闭包。因此,您需要直接调用where方法,并手动将表名限定符添加到where条件中。

类似的东西:

where