我正在尝试为认证数据库创建1对多的关系。每个emplyee都可以拥有多个证书,因此我希望在Controller下运行索引时显示员工的姓名。我有2个型号:
在我的员工模型中(并非每个员工都有证书)
public function certs()
{
return $this->hasMany('App\Cert');
}
在我的证书模型中我有
public function employee()
{
return $this->belongsTo('App\Employee');
}
在我的CertsController中我有
public function index()
{
//
$certs = DB::table('certs')->orderBy('expiresOn', 'asc')->paginate(50);
$owner = Cert::with('employee')->get();
return view('certs.index', compact('certs', 'owner'));
}
在我的视图中我(在foreach中按顺序显示我的所有证书)
<small>Belongs to: {{$cert->owner->name}}</small><br>
我也试过
<small>Expires on: {{$cert->employee->name}}</small><br>
他们产生以下错误
尝试获取非对象的属性(查看:C \ resources \ views \ certs \ index.blade.php)
答案 0 :(得分:0)
$cowner = Cert->employee->get();
然后在视图中
{{$owner->name}}
或你的方式:
@foreach($certs->employee as $awardedCert)
{{$awardedCert->name}}
@endforeach
答案 1 :(得分:0)
你必须修改你的雄辩关系,因为你有一个自定义的foreign_key属性(通常laravel会期望employee_id
),但是因为你使用了自定义名称(owner
),所以你必须告诉laravel
public function certs()
{
return $this->hasMany('App\Cert','owner','id');
}
在模板中:
@foreach($certs as $cert)
{{$cert->employee->id}}
@endforeach
答案 2 :(得分:0)
在你的控制器中试试这个
use App\Certs
public function index()
{
$certs = new Certs();
$certs->with('employee')->get()
return view('certs.index')->with('certs', $certs);
}
并且在视图中
@foreach($certs as $cert)
{{$cart->employee()->first()->id}}
//or
{{$cart->employee->id}}
//if it a oneToMany
@foreach($cart->employee as $employee)
{{employee->id}}
@endforeach
@endforeach