Laravel - 1对多人的关系

时间:2017-09-04 22:45:44

标签: php laravel entity-relationship

我正在尝试为认证数据库创建1对多的关系。每个emplyee都可以拥有多个证书,因此我希望在Controller下运行索引时显示员工的姓名。我有2个型号:

  • 员工(持有员工名单)
  • Certs(持有OWNER列的证书,其中包含员工的DB)

在我的员工模型中(并非每个员工都有证书)

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)

3 个答案:

答案 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