我创建了一个集合并传递给视图:
$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?我会以我所知道的答案为难。我已经看了很久的东西中的另一件事,我看不到我所缺少的。
答案 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 ?? '' }}