我对这些雄辩的关系有很多了解,但我的理解并不完全。
我有三张桌子:
候选人信息
•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
。*,results
。candidate_id
来自{ {1}} qualifications
= results
。results
其中id
。qualifications
in {17} {1}}内部联接result_id
))
任何人都可以帮助我或指出我正确的方向吗?我甚至不确定我是否正在使用hasManyThrough做正确的事情。
答案 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函数中添加这些。与删除相同,如果你删除了表,这些也将被删除。