2016-04-20 4 views
0

Я являюсь абсолютным новичком в системе Laravel. У меня проблема, связанная со сводной таблицей.Laravel 5.0: вопрос о сводной таблице

Я хотел бы получить коллекцию, прилагаемую к определенному идентификатору.

MyController

/** 
* Show the form for creating a new resource. 
* 
* @return Response 
*/ 
public function create(){ 

    $loggedInUser = \Auth::user(); 
    $users = User::lists('first_name', 'id'); 
    $instructors = // Here comes a collection that has a role_id "2" on the pivot table. 
        //This is where I have no idea what to put 

    return view('courses.create', compact('loggedInUser', 'users', 'instructors')); 
} 

В этом случае, я хотел бы поставить коллекцию ниже в указанных выше переменных «наставников», потому что ниже коллекция была присоединена к ROLE_ID 2, который является инструктором.

id: "2", 
    first_name: "alex", 
    last_name: "powder", 
    email: "[email protected]", 
    ID: "819763758", 
    created_at: "2016-04-18 21:34:12", 
    updated_at: "2016-04-19 19:30:48" 

$ instructor-> роли

id: "2", 
    name: "instructor", 
    created_at: "2016-04-18 21:34:13", 
    updated_at: "2016-04-18 21:34:13", 
    pivot: <Illuminate\Database\Eloquent\Relations\Pivot #000000007a61781e00000001381bb0f0> { 
      user_id: "2", 
      role_id: "2", 
      created_at: "2016-04-18 22:54:06", 
      updated_at: "2016-04-18 22:54:06" 

Role.php

public function users(){ 
    return $this->belongsToMany('App\User'); 
} 

User.php

public function roles(){ 
    return $this->belongsToMany('App\Role')->withTimestamps(); 
} 

Английский не является моим первым языком. Если этот пост не имеет смысла, оставьте свои комментарии. Любой совет будет принят во внимание! Заранее спасибо!

+0

вы хотите, чтобы пользователи, которые имеют 'role_id'' 2' с там ролями правильно? –

+0

да! Пользователи, чья role_id равно 2 на сводной таблице – ILoveBaymax

ответ

1

Вы должны использовать whereHas, если вы ищете пользователей, которые имеет role_id2

$instructors = User::whereHas('roles', function($q) { 
     $q->where('id', 2); 
    })->with('roles')->get(); 

это принесет пользователям, которые имеет roles2

+0

Вау! Большое спасибо ARIF! Ты обалденный!! – ILoveBaymax

+0

Также сделайте закрытие инструкции WITH, так как в противном случае вы получите все роли, прикрепленные к выбранным пользователям. – blablabla

1

Попробуйте этот запрос.

$instructors = User::whereHas('roles', function($query) { 
    $query->where('roles.id', '=', 2); 
})->get(); 
1

Для пользователей, кто ROLE_ID (динамический) является:

$role_id = 2; 

$instructors = User::with('roles')->whereHas('roles', function($q) use ($role_id){ 
     $q->where('role_id', $role_id); 
})->get(); 
Смежные вопросы