我有三张桌子即:
现场:
id|name|slug|location|description
Accounthead:
id|accountname|slug
交易:
id|name|slug|site_id|accounthead_id|...
我的网站模型如下:
class Site extends Model
{
protected $fillable = [
'name',
'slug',
'location',
'description'
];
public function transactions()
{
return $this->hasMany('App\Transaction', 'site_id');
}
}
我的AccountHead模型看起来像:
class AccountHead extends Model
{
protected $fillable = [
'slug',
'accountname'
];
public function transactions()
{
return $this->hasMany('App\Transaction','accounthead_id');
}
}
我的交易模型如下:
class Transaction extends Model
{
public function site()
{
return $this->belongsTo('App\Site','id');
}
public function accounthead()
{
return $this->belongsTo('App\AccountHead','id');
}
}
在我的一个刀片中,我想显示所有事务和相关字段:
我的刀片文件
@forelse($transactions as $key => $transaction)
<tr>
<td>{{++$key}}</td>
<td>{{$transaction->updated_at->format('M d Y')}}</td>
<td>{{str_limit($transaction->name, 47) }}</td>
<td>{{str_limit($transaction->accounthead->accountname,47)}}</td>
<td>{{str_limit($transaction->site->Name,47)}}</td>
<td>{{str_limit($transaction->amount,47)}}</td>
</tr>
@empty
<tr>
<td colspan="4" class="text-center">No Transactions available.</td>
</tr>
@endforelse
它工作正常,除非一个Site / AccountHead用于多个Transaction。一旦站点/账户头被用于多个交易,它就会抛出:
(2/2) ErrorException
Trying to get property of non-object
我错过了这里真正愚蠢的事吗?
首先,你应该修复关系:
public function site()
{
return $this->belongsTo('App\Site', 'site_id', 'id');
}
public function accounthead()
{
return $this->belongsTo('App\AccountHead', 'accounthead_id' 'id');
}
要不就:
public function site()
{
return $this->belongsTo('App\Site');
}
public function accounthead()
{
return $this->belongsTo('App\AccountHead');
}
之后,如果它仍然不起作用,您需要确保每个交易都有“网站”和“帐户头”关系。换句话说,transactions
表中的每一行都应该在site_id
和column_id
列中具有正确的ID。
如果不是每个事务都有站点或帐户头,则需要在尝试使用相关对象属性之前进行检查:
<td>{{ str_limit(optional($transaction->accounthead)->accountname, 47) }}</td>
<td>{{ str_limit(optional($transaction->site)->Name, 47) }}</td>
问题是代码中的拼写错误。代替:
str_limit($transaction->accountheads->accountname,47)
你应该有:
str_limit($transaction->accounthead->accountname,47)
因为这是你们关系的名称。
也可能在以后你没有accounthead
的某种关系 - 在这种情况下看看Laravel 5 get data other table