Как вернуть поле идентификатора в связанной таблице в запросе Laravel

#laravel

Вопрос:

У меня есть две связанные таблицы, и я хочу вернуть все поля, включая поле ID (ключ). Мой запрос ниже возвращает все поля, кроме идентификатора. как мне вернуть поле идентификатора из одной из таблиц?

 'programmes' => ProgrammeInstances::with('programmes')->get(),
 

приведенный ниже запрос возвращает неизвестный столбец «programs.programe_title», поскольку он ищет его в таблице «programe_instances»

 'programmes' => ProgrammeInstances::with('programmes')->select('programmes.programme_title', 'programmeInstances.id', 'programmeInstances.name', 'programmeInstances.year')->get(),
 

Ответ №1:

Laravel предоставляет несколько взаимосвязей, одной из которых является hasMany() взаимосвязь, которая должна возвращать коллекцию, в которой User внутри вашей базы данных имеется множество строк

Например, в вашей пользовательской модели :

 public function programmes() {
  return $this->hasMany(Program::class);
}
 

Теперь в своем контроллере вы можете :

 public function edit($id) {
  $programmes = User::find($id)->with('programmes')->get();

  return view('user.edit')->with('programmes', $programmes);
}
 

А затем вы можете просмотреть его в своем представлении

 @forelse($programmes->programmes as $program)
   // provide the data
@empty 
  // the user doesn’t have any programmes
@endforelse
 

Комментарии:

1. спасибо, но моя связь с таблицей-это не пользователи, и моя проблема заключается в том, что я не могу вернуть поле идентификатора

Ответ №2:

решение, которое я нашел ниже, — все еще не уверен, почему ID не возвращается автоматически, когда я получаю все поля, но работает, когда я указываю отдельные поля:

 'programmes' => ProgrammeInstances::with('programmes')
    ->get()
    ->transform(fn ($prog) => [
      'programme_title' => $prog->programmes->programme_title,
      'id' => $prog->id,
      'name' => $prog->name,
      'year' => $prog->year,
]),