Laravel刀片-访问集合中的最后一个元素

时间:2019-02-23 19:05:55

标签: laravel laravel-blade

我创建了一个集合并传递给视图:

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

我想访问上一个答复中的字段并显示用户ID,摘录:

@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 :(得分:2)

首先,当您说{{ $ticket->comments->last() }}时,它将返回您序列化的模型实例。它以__toString()魔术方法生成。它将php对象转换为字符串。

这是Illuminate\Database\Eloquent\Model类的tooString魔术方法

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

Trying to get property 'id' of non-object

您收到该错误,因为您的某些票没有评论。因此,您的票证的某些评论关系返回null,并且您试图访问null中的id属性,这会导致上述错误

解决方案

避免这种错误的最佳方法是使用optional()方法,这种方法非常适合这种情况。

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

如果comment关系中没有任何项,则不会引发错误。

答案 1 :(得分:1)

如果last()返回null,则->id将引发错误。在这种情况下,您可以使用Null Coalescing Operator

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