Я недавно задал вопрос об определении отношения многих ко многим (используя принадлежность ToMany), и это было огромной помощью.Так что теперь в моих моделях у меня есть:
Пользовательская модель
public function subjects()
{
return $this->belongsToMany('App\Subject', 'users_subjects', 'user_id', 'subjects_id');
}
Тематическая модель
public function users()
{
return $this->belongsToMany('App\User', 'users_subjects', 'subject_id', 'user_id');
}
Таким образомЯ устанавливаю связь между users
и subjects
через таблицу users_subjects
.Моим следующим шагом было создание контроллера SubjectsController, который в итоге выглядел так:
class SubjectsController extends Controller
{
// returns the view where subjects will be displayed
public function index()
{
return view('profiles.professor.prof_didactic_subjects');
}
// get users with subjects
public function getSubjects()
{
$subjects = User::with('subjects')->get();
}
// get a single user with a subject
public function getSubject($id)
{
$materia = User::where('id', '=', $id)->with('subjects')->first();
}
}
Хотя я не очень уверен насчет кода в контроллере.
Последний шагвот где мне становится сложно, даже после прочтения документации: я хочу передать каждый результат в представление, чтобы у меня было несколько плиток, каждая из которых была заполнена данными объектов, с которыми связан пользователь:
@foreach ($subjects as $subject)
<div class="tile is-parent">
<article class="tile is-child box">
<p class="title">{{ $subject['name'] }}</p>
<div class="content">
<p>{{ $subject['description'] }}</p>
</div>
</article>
</div>
@endforeach
Я пробовал много разных конфигураций маршрутов, но получал либо неопределенную переменную ошибку, либо пытался получить доступ к ошибке не объекта.
Какой правильный порядок действий здесь?Я чувствую, что упускаю что-то очень простое.Заранее благодарен за любую помощь.
Ответ
Решение, предоставленное ниже @ Sohel0415, работает отлично.Мой метод index()
на контроллере теперь выглядит следующим образом:
public function index()
{
// temporary value while I figure out how to get the id of the current user
$user_id = 6;
$subjects = Subject::whereHas('users', function($q) use ($user_id){
$q->where('user_id', $user_id);
})->get();
return view('profiles.professor.prof_didactic_subjects')->with('subjects', $subjects);
}
Мой маршрут выглядит следующим образом:
Route::get('/professor', 'SubjectsController@index');
Я был довольно потерян, так что это абсолютно спасло меня, спасибо еще раз:)