lundi 14 mars 2016

Laravel 5 `belongsToMany` with `wherePivot` eloquent query is not working properly

Suppose I have users,courses and course_users tables, users belongs to many courses and the structure of pivot table course_users is as bellow:

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

now I have bellow code:

$user = User:find(1);

and I have bellow function in user model:

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

and if I want to get the course of user:

$user->courses();

But the output query of above function is like:

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';

But I need to have something like this:

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');

The difference is in where clause.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire