Stworzyłem kolekcję i przekazałem do widoku:

$tickets = Tickets::with('comments')->get();

Chcę uzyskać dostęp do pól w ostatniej odpowiedzi i wyświetlić identyfikator użytkownika, fragment:

@foreach ($tickets as $ticket)
...
<td>{{ $ticket->comments->last() }}</td>
...
@endforeach

Powyższe działa dobrze, że zwraca tablicę ostatniego elementu, coś w rodzaju:

{"id":12,"body":"Close", ...}

Wszystko, co próbuję zrobić, to zwróć wartość ID, a nie tablicy.

Wiem, że to coś głupiego, z widokiem, uprzejmy spodziewałem się tego do pracy:

{{ $ticket->comments->last()->id }}

Ale wraca oczywiście błąd, oczekuję, że jak już nazywałem ostatni () nie ma nic do łańcucha poza tym.

Trying to get property 'id' of non-object

Czy ktoś może doradzić, jak zwrócić tylko identyfikator? Będę odpowiednio zawstydzony odpowiedzią, którą to znam. Jeszcze jedna z tych rzeczy, które wyglądałem tak długo, nie widzę, czego brakuje.

1
Holo 23 luty 2019, 22:05

2 odpowiedzi

Najlepsza odpowiedź

Przede wszystkim, kiedy mówisz {{ $ticket->comments->last() }} zwróci Ci serializowaną instancję modelu. Wygenerowano w metodzie magicznej {X1}}. Konwertuje obiekt PHP do łańcucha ..

A oto TOOSTRING Magic Metoda klasy Illuminate\Database\Eloquent\Model

/**
 * Convert the model to its string representation.
 *
 * @return string
 */
public function __toString()
{
    return $this->toJson();
}

Trying to get property 'id' of non-object

Dostajesz ten błąd, ponieważ niektóre z biletów nie ma komentarza. Więc niektóre z twoich komentarzy relacji biletów zwracają NULL i próbujesz osiągnąć własność ID w null i powoduje, że powyższy błąd

ROZWIĄZANIE

Najlepszym sposobem na uniknięcie tego błędu jest przy użyciu metody optional(), która jest idealnie dopasowana dla sytuacji.

{{ optional($ticket->comments->last())->id }}

Jeśli relacja komentarzy nie ma żadnego elementu, nie rzuca błąd.

2
Teoman Tıngır 25 luty 2019, 19:16

Jeśli last() zwraca null, a następnie {x1}} rzuci błąd. Możesz użyć {x2}} W tym przypadku:

{{ $ticket->comments->last()->id ?? '' }}
1
Mihir Bhende 23 luty 2019, 19:27