Laravel 获取非对象的属性
Posted
技术标签:
【中文标题】Laravel 获取非对象的属性【英文标题】:Laravel get property of non object 【发布时间】:2016-02-12 20:43:49 【问题描述】:当我尝试确定一个对象是否为空时,它会告诉我:
试图获取非对象的属性
我是这样做的:
$lastTicket = Auth::user()->ticket->last()->ticketid;
if($lastTicket->isEmpty())
$lastTicket = 0;
显然 Auth::user()->ticket->last();还没有记录。我该怎么做?我正在与 Laravel 合作。
【问题讨论】:
根据您上面的内容,ticketid
是属性而不是对象。因此,您不能使用对象表示法或在$lastTicket
上调用诸如->isEmpty();
之类的方法。
【参考方案1】:
正确答案是:
$lastTicket = !Auth::user()->ticket->last() ? Auth::user()->ticket->last()->ticketid+1 : 0;
因为如果它为空,它将默认返回 0。
【讨论】:
【参考方案2】:在获取属性之前,您需要检查集合不为空:
if(Auth::user()->ticket->last()->isEmpty())
$lastTicket = 0;
else
$lastTicket = Auth::user()->ticket->last()->lastId;
简而言之:
$lastTicket = !Auth::user()->ticket->last()->isEmpty() ? $lastTicket = Auth::user()->ticket->last()->lastId : 0;
【讨论】:
感谢您的回复,但当我这样做时,它告诉我:调用未定义的方法 Illuminate\Database\Query\Builder::isEmpty() 如果 last() 关系是 OneToOne 这个构造必须有效: $lastTicket = !empty(Auth::user()->ticket->last()) ? $lastTicket = Auth::user()->ticket->last()->lastId : 0; 当我尝试时: $lastTicket = Auth::user()->ticket->last()->ticketid; if($lastTicket->isEmpty()) $lastTicket=1; var_dump($lastTicket); 抛出异常:在非对象上调用成员函数isEmpty() 我发现你只能在收集母猪上使用 isEmpty() 这不起作用。【参考方案3】:首先看看here 是否可以解决您的问题。无论如何,如果您尝试加载关系,您应该查看official documentation:
动态属性
Eloquent 允许您通过动态属性访问您的关系。 Eloquent 会自动为你加载关系,甚至可以知道是调用 get(对于一对多关系)还是 first(对于一对一关系)方法。然后可以通过与关系同名的动态属性访问它。例如,使用以下型号 $phone:
class Phone extends Eloquent public function user() return $this->belongsTo('User'); $phone = Phone::find(1);
而不是像这样回显用户的电子邮件:
echo $phone->user()->first()->email;
可以简写为:
echo $phone->user->email;
【讨论】:
以上是关于Laravel 获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章