2015-11-10 4 views
0

Я многому учусь об этих красноречивых отношениях, но я не совсем здесь в своем понимании.Laravel 5 hasManyThrough error

У меня есть три таблицы:

Кандидаты • ид
• candidate_number
• givennames
• FamilyName
• д.р. • created_at
• updated_at

Результаты • идентификатор
• certificate_number
• candidate_id
• qualification_id
• created_at
• updated_at

Квалификация • идентификатор
• код
• название
• 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]: Column не найдено: 1054 Неизвестный столбец 'qualifications.result_id' в 'on clause' (SQL: выберите qualifications. *, results. candidate_id от qualifications внутреннее соединение results на results. id = qualifications. result_id, где results. candidate_id in (17))

Может ли кто-нибудь помочь мне или указать мне в правильном направлении?Я даже не уверен, что поступаю правильно с hasManyThrough.

ответ

0

Если результат имеет много Квалификаций, тогда внешний ключ должен быть помещен в таблицу квалификаций. Например:

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

Вам не нужно удалять таблицу, чтобы добавить это. Просто зайдите на свой терминал и создайте новый файл миграции.

php artisan make:migration edit_qualification_table --table=qualifications 

Затем добавьте их в функции повышения. То же самое, если вы удалите таблицу, они тоже будут удалены.

+0

Извините, не знаю, хорошо ли я объясняю себя. Результат имеет только одну квалификацию. По крайней мере, это то, что я пытаюсь сделать. – 0w3n86

Смежные вопросы