Laravel 5 hasManyThrough错误

时间:2015-11-10 16:50:38

标签: laravel-5 eloquent has-many-through

我对这些雄辩的关系有很多了解,但我的理解并不完全。

我有三张桌子:

候选人信息 •id
•candidate_number
•给定名字
•姓氏
•dob •created_at
•updated_at

结果 •id
•certificate_number
•candidate_id
•qualification_id
•created_at
•updated_at

资格 •id
•代码
•标题
•created_at
•updated_at

候选人有很多结果,而且资格证书有很多结果。结果属于资格和候选人。在candidaes.show页面上,我想使用hasManyThrogh关系显示与该候选人相关的资格。 这是我的模特。

候选人:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Candidate extends Model {

    protected $table = 'candidates';
    public $timestamps = true;


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

    public function qualification()
    {
        return $this->hasManyThrough('App\Qualification', 'App\Result');
    }
}

结果型号:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Result extends Model {

   protected $table = 'results';
   public $timestamps = true;

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

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

}

资格模型:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Qualification extends Model {

   protected $table = 'qualifications';
   public $timestamps = true;

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

   public function candidate()
   {
      return $this->hasManyThrough('App\Candidate', 'App\Result');
   }
}

在我的候选人控制器中:

public function show($id)
{
    $candidate = Candidate::with('qualification')->find($id);

    return view('candidates.show', compact('candidate'));
}

,在我看来:

@extends('app')

@section('content')

    <h1>{{ $candidate->givennames }} {{ $candidate->familyname }}</h1>

    <div class="body"> {{ $candidate->dob }} </div>

    <div class="body"> {{ $candidate->candidate_number }} </div>

    <h3> Centre </h3>


    <h3> Qualifications </h3>

    @foreach($candidate->qualification as $qualification)

        <div class="body"> {{ $qualification->title }} </div>

    @endforeach

@stop

然而,它重新调整了以下错误:

SQLSTATE [42S22]:找不到列:1054'on子句'中的未知列'qualifications.result_id'(SQL:选择qualifications。*,resultscandidate_id来自{ {1}} qualifications = resultsresults其中idqualifications in {17} {1}}内部联接result_id ))

任何人都可以帮助我或指出我正确的方向吗?我甚至不确定我是否正在使用hasManyThrough做正确的事情。

1 个答案:

答案 0 :(得分:0)

如果结果有许多资格,则需要在资格表上放置外键。像这样:

$table->integer('result_id')->unsigned();
$table->foreign('result_id')->references('id')->on('results');

您无需删除表格即可添加此内容。只需转到您的终端并创建一个新的迁移文件

php artisan make:migration edit_qualification_table --table=qualifications

然后在up函数中添加这些。与删除相同,如果你删除了表,这些也将被删除。