Laravel Eloquent没有返回所有相关模型

时间:2016-02-20 09:44:47

标签: php laravel-5.2 laravel-blade

我有一个没有返回相关模型的模型,Call和CallType是我的模型,具有一对一的关系。

致电型号

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

CallType Model

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 Migration

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

我收到此错误:

  

尝试获取非对象的属性

当我dd($calls)时,它没有相关模型。我究竟做错了什么?请帮忙。

3 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

首先,您应该使用预先加载来最小化数据库查询。

变化:

$calls = Call::all();

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

您收到的错误是因为您可能没有为每次通话设置calltype,因此您应该更改模板:

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

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

答案 2 :(得分:0)

我明白了。我应该在CallType上有一个hasMany,因为每个CallType可以分配许多Call。它应该是这样的:

CallType Model

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

致电型号

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