Laravel: передача данных для просмотра по маршруту после запроса - PullRequest
0 голосов
/ 26 апреля 2018

Я недавно задал вопрос об определении отношения многих ко многим (используя принадлежность 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');

Я был довольно потерян, так что это абсолютно спасло меня, спасибо еще раз:)

1 Ответ

0 голосов
/ 26 апреля 2018

Вам нужно передать $subjects вашему view.Вы можете использовать метод compact() для этого, как -

public function index()
{
    $subjects = Subject::with('users')->get();
    return view('profiles.professor.prof_didactic_subjects', compact('subjects'));
}

Или использовать метод with(), как -

public function index()
{
    $subjects = Subject::with('users')->get();
    return view('profiles.professor.prof_didactic_subjects')->with('subjects', $subjects);
}

Если вы хотите получить Subject для определенного user_id, используйте whereHas() -

$subjects = Subject::whereHas('users', function($q) use ($user_id){
      $q->where('user_id', $user_id);
})->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...