#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,
]),