Php 雄辩的关系停止运作,不再';我不再工作了
我有下面两个模型,它们有一对一的关系。它们工作起来很有魅力,但突然(可能是因为数据库中的一些更新(添加了2个新列))停止了工作。只有当我试图获得作为车费一部分的付款时,我才会出现错误。比如说Php 雄辩的关系停止运作,不再';我不再工作了,php,laravel,laravel-4,Php,Laravel,Laravel 4,我有下面两个模型,它们有一对一的关系。它们工作起来很有魅力,但突然(可能是因为数据库中的一些更新(添加了2个新列))停止了工作。只有当我试图获得作为车费一部分的付款时,我才会出现错误。比如说 $fare->payment->amount; 给出错误:尝试获取非对象的属性 当我使用DD()时;要进行调试,我将看到以下内容 有人知道该怎么做或如何解决这个问题吗 你可以在下面找到模型 class Fare extends Eloquent { protected $table
$fare->payment->amount;
给出错误:尝试获取非对象的属性
当我使用DD()时;要进行调试,我将看到以下内容
有人知道该怎么做或如何解决这个问题吗
你可以在下面找到模型
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;
}
}
错误如下所示:
Trying to get property of non-object
当您从Fare
访问payment
时,它会上升,如下所示:
$fare->payment->amount;
{{ $fare->payment ? $fare->payment->amount : '' }}
根据您的dd()
结果,您有一些Fare
对象,但没有相关的Payment
:
// In your pastebin you have similar entries
["payment"]=>
NULL
因此,在返回的集合中,您有一些Fare
对象没有相关的Payment
,因此出现此错误,请确保Fare
对象具有相关的Payment
对象,然后再尝试访问一个对象。您可以尝试以下方法:
$fare->payment->amount;
{{ $fare->payment ? $fare->payment->amount : '' }}
由于它有效,我认为您在表中添加了一个“payment”列,因此使用
$fare->payment
可以访问属性而不是关系,您有3个选择:
$fare->payment()->first()->amount
谢谢你的回答:)谢谢你的回答,我把它弄明白了。你的回答不是很正确,但它帮助我找到了正确的方向。我在票价表中添加了一个名为“付款”的列。。我真是太傻了:)既然你有一对一的关系,而且你使用了一对一(
$this->hasOne('Payment')
,那么你只会得到一个付款
对象,而不是一个集合。啊,我刚刚找到了mysql,因为这里有另一个答案。。因此,这让我找到了正确的方向,但这正是问题所在:)与您的问题无关,但默认情况下,您在处创建的列和在
处更新的列都是碳对象。因此,getTimeagoAttribute()
只需返回$this->created\u at->diffForHumans()
!