Я застрял в проблеме, когда пытаюсь очистить представленный мне код, и мне кажется, что я, должно быть, слишком долго занимался этим и не вижу этой проблемы.
На данный момент у меня в одной из моих моделей есть следующий код:
public function attachments(){
return $this->hasMany(volunteerAttachment::class, 'volunteerID','id');
}
public function photoID() {
$photoID= $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->limit(1);
return $photoID;
}
Я хотел бы сделать то, что я считал относительно простым - заменить limit(1) функции photoIdentification на простой first().
Но когда я пробую это и просто вставляю {{$volunteer->photoID->id}} в свой блейд, он просто возвращает ошибку App\volunteer::photoID must return a relationship instance.
Однако я знаю, что существует связь, потому что, если я продолжу использовать limit(1) и поставлю:
@foreach($volunteer->photoID as $id)
{{$id->id}}
@endforeach
Он правильно возвращает отношение и документ.
$volunteer - это переменная для этой конкретной модели App\volunteer, и в контроллере она определяется следующим образом:
public function show(Volunteer $volunteer){
return view('volunteer.show', compact('volunteer'));
}
$volunteer - это просто переменная для этой конкретной модели App \ volunteer.
Это не помогает, отредактируйте свой вопрос и добавьте все, что связано с вашей проблемой.
Ну, кроме контроллера, который я только что включил, все есть. Как я уже сказал, он работает в одном случае, когда он возвращается в виде коллекции, но не во втором способе (с первым), когда он должен возвращать один экземпляр.
Думаю, это могло быть связано с добавить пользовательскую функцию в модель Laravel. Попробуйте вместо этого использовать аксессуар
@Alberto - Большое спасибо! Вы указали мне правильное направление, и я заставил его работать. Хотели бы вы опубликовать это как свой ответ, чтобы я мог его принять? Еще раз спасибо!
Можете ли вы разместить содержание модели «Волонтер»?






Функция photoID() по-прежнему будет возвращать полный объект volunteerAttachment. Если вы хотите получить идентификатор с помощью функции first(), вам нужно будет выбрать свойство id для объекта следующим образом:
{{ $volunteer->photoID()->id }}
Вы также можете создать аксессуар в модели, которая напрямую возвращает это свойство:
public function getPhotoidAttribute($value)
{
return $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->first()->id;
}
Теперь в клинке вы можете просто использовать:
{{ $volunteer->photoid }}
Когда вы вызываете функцию модели в качестве переменной, Laravel предполагает, что вы пытаетесь вернуть связанную модель. Попробуйте вместо этого использовать аксессуар:
public function getPhotoidAttribute($value) {
$photoID= $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->first();
return $photoID->id;
}
и назовите это так:
{{ $volunteer->photoid }}
Что такое
$volunteer.