Laravel blade - доступ к последнему элементу в коллекции - PullRequest
0 голосов
/ 23 февраля 2019

Я создал коллекцию и передал ее представлению:

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

Я хочу получить доступ к полям в последнем ответе и отобразить идентификатор пользователя, выдержка:

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

Вышеприведенное прекрасно работает, так как возвращает массив последнего элемента, что-то вроде:

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

Все, что я пытаюсь сделать, это вернуть значение id, а не массив.

Я знаю, что это что-то глупое, я упускаю из виду, упрощенно я ожидал, что это сработает:

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

Но это возвращает ошибку, конечно, я ожидаю, что, как я уже вызвал last (), нет ничегодоступны для этого.

Trying to get property 'id' of non-object

Кто-нибудь может посоветовать, как вернуть только ID?Я буду соответственно смущен ответом, который я знаю это.Просто еще одна из тех вещей, на которые я так долго смотрел, что не вижу, чего мне не хватает.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Прежде всего, когда вы скажете {{ $ticket->comments->last() }}, он вернет вам сериализованный экземпляр модели.его генерируется в __toString() магическом методе.он преобразует объект php в строку ..

А вот и магический метод tooString Illuminate\Database\Eloquent\Model class

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

Trying to get property 'id' of non-object

Выполучить эту ошибку, потому что некоторые из ваших билетов не имеют комментариев.Таким образом, некоторые из ваших комментариев о комментариях к тикетам возвращают нуль, и вы пытаетесь достичь свойства id в null, и это вызывает вышеуказанную ошибку

SOLUTION

Лучший способ избежать этой ошибки -используя метод optional(), который идеально подходит для такой ситуации.

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

Если в отношении комментариев нет элемента, оно не выдаст ошибку.

0 голосов
/ 23 февраля 2019

Если last() возвращает ноль, то ->id выдаст ошибку.Вы можете использовать Null Coalescing Operator в этом случае:

{{ $ticket->comments->last()->id ?? '' }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...