Laravel 5.6 Красноречивые отношения, уровень 2 - PullRequest
0 голосов
/ 08 ноября 2018

How to get all of the data on this picture.

Как получить все данные на этой картинке. Я использую Laravel 5.6 Eloquent Model.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Сначала вы должны понять отношения с моделью Laravel.

Я пытался отобразить отношение. дайте мне знать, если я ошибаюсь.

вот я думаю:

  • кандидат имеет один год
  • один год есть несколько кандидатов
  • один год принадлежит одному отделу (эта часть сбивает с толку)

Модель отдела

class Department extends Model
{
    public function years(){
        return $this->hasMany(Year::class,'dept_id');
    }
}

Год Модель:

class Year extends Model
{
    public function department(){
        return $this->belongsTo(Department::class,'dept_id');
    }

    public function candidates(){
        return $this->hasMany(Candidate::class,'year_id', 'year_id');
    }
}

Кандидат Модель:

class Candidate extends Model
{
    public function year(){
        return $this->belongsTo(Year::class,'year_id','year_id');
    }
}

Контроллер:

 public function index()
    {
        $data = Year::with(['department', 'candidate'])->get();
        dd($data);
    }
0 голосов
/ 08 ноября 2018

Оставьте столбцы с именами в соответствии с тем, что вы написали в диаграмме отношений, и назовите таблицы как year, depts ,андидаты , затем определите Year hasMany Dept и hasMany Candidate :

class Year extends Model
{    
    public function depts()
    {
        return $this->hasMany('App\Dept');
    }

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

Затем вы можете взять их всех методом , в контроллере:

$years = App\Year::with(['depts', 'candidates'])->get();

ОБНОВЛЕНИЕ

Кандидат также может быть основной моделью, применяя Вложенную нетерпеливую загрузку .

. Убедитесь, что вы определили Кандидата и Отдел сначала:

Модель-кандидат

class Candidate extends Model
{    
    public function Year()
    {
        return $this->belongsTo('App\Year');
    }
}

Модель Dept

class Dept extends Model
{    
    public function Year()
    {
        return $this->belongsTo('App\Year');
    }
}

В контроллере

$candidates = App\Candidate::with('year.depts')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...