我有一个没有返回相关模型的模型,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)
时,它没有相关模型。我究竟做错了什么?请帮忙。
答案 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
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');
}