2016-02-20 34 views
1

我有一個模型未返回相關模型,Call和CallType是我的模型,具有一對一關係。Laravel Eloquent不返回所有相關模型

呼叫模型

public function calltype(){ 
    return $this->hasOne('App\CallType'); 
} 

CALLTYPE模型

public function call(){ 
    return $this->belongsTo('App\Call'); 
} 

CallsController索引方法

$calls = Call::all(); 
    $user_group = Group::find(Auth::user()->group_id); 

    return view('settings.calls.index', compact('calls', 'user_group')); 

calls.blade.php

@foreach($calls as $call) 

    <tr> 
    <td>{{$call->call_code}}</td> 
    <td>{{$call->call_name}}</td> 
    <td>{{$call->calltype->type}}</td> 
    </tr> 
@endforeach 

電話遷移

Schema::create('calls', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('call_type_id')->unsigned(); 
      $table->string('call_name'); 
      $table->string('call_code'); 
      $table->date('start_date'); 
      $table->date('end_date'); 
      $table->string('target_audience')->nullable(); 
      $table->text('description')->nullable(); 
      $table->timestamps(); 
      $table->softDeletes(); 

      $table->foreign('call_type_id')->references('id')->on('call_types'); 
     }); 

CallTypes遷移

Schema::create('call_types', function (Blueprint $table) { 
     // 
     $table->increments('id'); 
     $table->string('type'); 
     $table->timestamps(); 
    }); 

我收到此錯誤:

Trying to get property of non-object

當我做dd($calls)它沒有相關的模型。我究竟做錯了什麼?請幫忙。

回答

0

試試這個
刀片

@if(isset($calls)) 
    @foreach($calls as $call) 
    <tr> 
    <td>{{$call->call_code}}</td> 
    <td>{{$call->call_name}}</td> 
    <td>{{$call->calltype->type}}</td> 
    </tr> 
    @endforeach 
@endif 

確保指數calls$calls

在clontroller

return view('calls')->with(['calls'=>$calls,'user_group'=> $user_group]); 
+0

更新我的帖子 – paranoid

+0

但儘管如此,即使我這樣做,'calltype'爲空..當我做'$ call = Call :: all();'時,'calltype'應該被返回,但它不會被返回。 –

0

首先,你應該使用預先加載,以儘量減少數據庫查詢。

變化:

$calls = Call::all(); 

$calls = Call::with('calltype')->get(); 

你得到的是,因爲可能你沒有CALLTYPE設定爲每次調用,所以你應該在你的模板更改錯誤:

<td>{{$call->calltype->type}}</td> 

分成

<td>{{ $call->calltype ? $call->calltype->type : '-' }}</td> 
+0

我只有一個電話,它有一個類型。感謝您的加載建議。或者也許是我定義我的關係的方式。我已編輯原始帖子來描述遷移 –

+0

我必須說這在以前工作。或者在我有多於一個類型的調用的情況下,它只返回一種類型,其餘的則失敗。這真的很奇怪。 –

0

我想通了。我應該在CallType上有一個hasMany,因爲每個CallType都可以有多個Calls分配給它。它應該是這樣的:

CALLTYPE型號

public function calls() 
{ 
return $this->hasMany('App\Call'); 
} 

呼叫模型

public function call_type(){ 
    return $this->belongsTo('App\CallType'); 
} 
相關問題