2017-12-20 27 views
1

비 개체 오류의 속성을 얻으려고 노력 즉 :Laravel : 나는 세 개의 테이블이

사이트 :

id|name|slug|location|description 

Accounthead :

id|accountname|slug 

거래 :

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'); 
    } 
} 
처럼
id|name|slug|site_id|accounthead_id|... 

내 사이트 모델 본다/AccountHead이 하나 개 사이트 않는 한, 그것은 잘 작동

@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 

내 블레이드 파일 : 내 블레이드 중 하나에서

나는 모든 거래와 관련 필드를 표시 할 둘 이상에 사용 거래. 사이트되면/Accounthead 개 이상의 트랜잭션 그것의 던지기에 사용됩니다 :

(2/2) ErrorException 
Trying to get property of non-object 

오전 내가 여기 정말 멍청한 짓 누락?

답변

1

먼저 살펴보고, 당신은 관계를 해결해야합니다

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'); 
} 

그 후, 당신은 모든 트랜잭션은 '사이트'와 'accounthead'relationshi 모두 가지고 있는지 확인해야합니다 추신.즉, transactions 테이블의 모든 행은 site_idcolumn_id 열에 올바른 ID가 있어야합니다. 하지 모든 트랜잭션이 사이트 또는 계정 머리가있는 경우

, 당신은 관련 객체 속성 사용하기 전에 그것을 확인해야합니다

<td>{{ str_limit(optional($transaction->accounthead)->accountname, 47) }}</td> 
<td>{{ str_limit(optional($transaction->site)->Name, 47) }}</td> 
+1

나는 이것이 주요 이슈라고 생각한다. 만약 그가'transaction'을위한'site_id' 컬럼을 가지고 있다면 그는 단지 두 번째와 세 번째 파라미터를 남겨둔다. – OIIO

+0

트랜잭션 테이블에서 데이터를 관찰 한 후에 site_id와 accounthead_id에 값 '0' 이 오류가 발생했습니다. 목록에서 사이트 또는 accounthead의 색인을 제공하는 {Form :: select}에서이 값을 얻고 있습니다. –

3

문제는 코드에 오타가 있습니다. 대신에 :

str_limit($transaction->accountheads->accountname,47) 

, 당신은해야합니다

str_limit($transaction->accounthead->accountname,47) 

를 그 관계의 이름이기 때문. 또한

당신이 어떤 관계 accounthead을하지 않아도 나중에 발생할 수있는 -이 경우에 모든 Laravel 5 get data other table

+0

미안 해요,하지만 그건 그냥 질문에 오타했다. 나는 그 질문을 편집했다. 오류는 여전히 우세합니다. –