2015-11-11 97 views
2

的财产当我尝试确定对象是否为空,它告诉我:Laravel得到非对象

试图让

我正在做这样的非对象的属性:

$lastTicket = Auth::user()->ticket->last()->ticketid; 
    if($lastTicket->isEmpty()) 
    { 
     $lastTicket = 0; 
    } 

很明显Auth :: user() - > ticket-> last();还没有记录。我应该怎么做?我正在和Laravel合作。

+0

根据你上面的内容,'ticketid'是属性而不是对象。因此你不能在'$ lastTicket'上使用对象符号或者调用' - > isEmpty();'方法。 – War10ck

回答

1

首先看看here如果能在你的问题的解决方案。不管怎样,如果你尝试加载的关系,你应该看看official documentation

动态属性

雄辩允许您通过动态属性访问你的关系。雄辩会自动为你加载关系,甚至足够聪明地知道是调用get(用于一对多关系)还是第一种(用于一对一关系)方法。然后可以通过与关系相同的名称通过动态属性进行访问。例如,下面的模型$电话:

class Phone extends Eloquent { 

    public function user() 
    { 
     return $this->belongsTo('User'); 
    } 

} 

$phone = Phone::find(1); 

而不是呼应了用户的电子邮件这样的:

echo $phone->user()->first()->email; 

它可以被简单地缩短:

echo $phone->user->email; 
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; 
+0

感谢您的回复,但是当我这样做,它告诉我:调用未定义的方法照亮\数据库\查询\生成器::的isEmpty() – Jamie

+0

如果最后一个()的关系是OneToOne这种结构必须工作:$ lastTicket =空( Auth :: user() - > ticket-> last())? $ lastTicket = Auth :: user() - > ticket-> last() - > lastId:0; – ClockworkOrange

+0

当我尝试:$ lastTicket = Auth :: user() - > ticket-> last() - > ticketid; 如果($ lastTicket->的isEmpty()){ $ lastTicket = 1; } var_dump($ lastTicket); – Jamie

0

的正确答案是:

$lastTicket = !Auth::user()->ticket->last() ? Auth::user()->ticket->last()->ticketid+1 : 0; 

,因为如果它是空的,它将返回0作为默认值。