Laravel获得非对象的属性

时间:2015-11-11 17:11:55

标签: php laravel-5

当我试图确定一个物体是否为空时,它告诉我:

  

尝试获取非对象的属性

我这样做:

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

显然是Auth :: user() - > ticket-> last();还不是记录。我该怎么做?我和Laravel一起工作。

3 个答案:

答案 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;

答案 1 :(得分:1)

首先看看here是否可以解决您的问题。无论如何,如果您尝试加载关系,您应该查看official documentation

  

动态属性

     

Eloquent允许您通过动态属性访问您的关系。 Eloquent会自动为您加载关系,甚至足够聪明,可以知道是调用get(一对多关系)还是第一个(一对一关系)方法。然后可以通过动态属性访问它,其名称与关系相同。例如,使用以下型号$ 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;

答案 2 :(得分:0)

正确答案是:

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

因为如果它为空,则默认返回0.