Переключение с Limit () на First () в модели Laravel - PullRequest
0 голосов
/ 13 июня 2018

Я застрял в проблеме, в которой я пытаюсь очистить представленный мне код, и мне кажется, что я, должно быть, слишком долго занимался этим и не вижу этой проблемы.

На данный момент у меня есть следующий код в одной из моих моделей:

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'));
    } 

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Когда вы вызываете функцию модели как переменную, Laravel предполагает, что вы пытаетесь вернуть связанную модель.Попробуйте использовать accessor вместо:

public function getPhotoidAttribute($value) {
    $photoID= $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->first();
    return $photoID->id;
}

и назовите его так:

{{ $volunteer->photoid }}
0 голосов
/ 13 июня 2018

Функция 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 }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...