2014-09-27 71 views
0

我有这两个模型下面有1对1的关系。他们像一个魅力工作,但突然(可能是因为数据库中的一些更新(添加2个新列)),它停止工作。只有当我尝试达到属于票价一部分的付款时,我才会收到错误。例如。雄辩关系停止工作,不再工作

$fare->payment->amount; 

给出一个错误:试图当我使用一个DD()来获得非对象 的属性;调试我看到下面的显示。 Pastebin

有人知道该怎么办或如何解决这个问题吗?

下面u能找到型号

class Fare extends Eloquent { 

    protected $table = 'fare'; 

    public function payment() 
    { 
     return $this->hasOne('Payment'); 
    } 

    public function email() 
    { 
     return $this->email; 
    } 

    public function getTimeagoAttribute() 
    { 
     $date = Carbon::createFromTimeStamp(strtotime($this->created_at))->diffForHumans(); 
     return $date; 
    } 

} 

class Payment extends Eloquent { 

    protected $table = 'payment'; 

    public function fare() 
    { 
     return $this->belongsTo('Fare'); 
    } 

    public function status() 
    { 
     return $this->belongsTo('Status'); 
    } 

    public function scopeApproved($query) 
    { 
     return $query->where('status', 1); 
    } 

    public function scopeDeclined($query) 
    { 
     return $query->where('status', 2); 
    } 

    public function getTimeagoAttribute() 
    { 
     $date = Carbon::createFromTimeStamp(strtotime($this->created_at))->diffForHumans(); 
     return $date; 
    } 


} 
+0

无关的你的问题,但默认你的'created_at'和'updated_at'列是Carbon对象。所以'getTimeagoAttribute()'可以简单地返回'$ this-> created_at-> diffForHumans()'! – Dwight 2014-09-28 11:30:00

回答

1

由于它的工作,我想你加入你的表中的“付款”一栏,所以用$fare->payment您访问属性没有关系,你有3种选择:

  1. 重命名列
  2. 使用$fare->payment()->first()->amount
  3. 重命名你的关系
+0

啊,我只是想出了它的MySQL,因为这里的其他答案..所以它导致我正确的方向,但这是确切的问题:) – Reshad 2014-09-27 19:23:53

1

如下面给出的错误:

$fare->payment->amount; 

据:

Trying to get property of non-object 

它,当你从Fare访问payment这样上升到你的dd()结果你有一些Fare个对象,而相关Payment

// In your pastebin you have similar entries 
["payment"]=> 
NULL 

因此,返回集合中你有一些Fare对象,而相关Payment所以这个错误出现,请确保Fare对象有一个相关的Payment对象您尝试访问一个前。您可以尝试这样的事:

{{ $fare->payment ? $fare->payment->amount : '' }} 
+0

感谢您的回复:)感谢您的回答,我明白了。你的回答并不完全正确,但它帮助我走向正确的方向。我在票价表中添加了一个名为payment的列..我真的很傻:) – Reshad 2014-09-27 19:23:07

+0

既然你有'一对一'的关系,并且你已经使用了'$ this-> hasOne('Payment')'那么你只会得到一个“Payment”对象不是一个集合。 – 2014-09-27 19:26:20