невозможно определить отношения в Laravel 5.7 - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть две таблицы как sbj_topics и difficulty_level_sbj_topic, поэтому я хочу определить отношение b \ w к ним для получения записей, поэтому для создания отношения я сделал это,

SbjTopic.php:

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

И в DiffiLvlSbjTopic.php:

protected $table = 'difficulty_level_sbj_topic';
public function sbj_topics() {
    return $this->belongsTo('App\SbjTopic');
}

После этого я вернул данные в представление как:

$easy = DiffiLvlSbjTopic::where(['subject_id' => $id, 'difficulty_level_id' => 2])->get();
return view('diffi_lvls.show', compact('easy'));

Затем в представлении я сделал это:

@foreach($easy as $easy)
    {{ $easy->sbj_topics }}
@endforeach

, но страница пуста, и когда я делаю это, {{ $easy->sbj_topics->sbj_topic_name }} пытается получить свойствоundefined! приходит.

Основная цель создания отношений состоит в отображении имени темы темы , поскольку у меня внешний ключ как sbj_topic_id в difficulty_level_sbj_topicстол, так что если у кого-то есть другая идея сделать это без отношений, это будет здорово.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Разбейте это:

  • SbjTopic - имеет много уровней
  • уровень принадлежит aSbjTopic

С этим пониманием я вижу, что выполучение уровней (DiffiLvlSbjTopic).Это на самом деле то, что вы передаете свой клинок.

Итак, прежде всего: завершите ваши отношения, указав внешние ключи.То есть: в модели SbjTopics:

public function difficulty_level_sbj_topic() {
    return $this->hasMany('App\DiffiLvlSbjTopic', 'subject_id');
}

с этим вы знаете, что в 'Трудность_уровня_сбдж_топа' у вас должен быть столбец subject_id.Теперь определите обратную связь в вашей модели DiffiLvlSbjTopic:

public function sbj_topics() {
    return $this->belongsTo('App\SbjTopic', 'subject_id');
}

Все это в вашем контроллере или маршруте - все, что вам нужно сделать, это получить свойства модели DiffiLvlSbjTopic.Например:

public function index () {
     $easy = DiffiLvlSbjTopic::all();
     return view('diffi_lvls.show', compact('easy'));
}

Наконец, на ваш взгляд:

@foreach($easy as $difflevel)
    <div>{{ $difflevel->sbj_topics->name }} </div>
@endforeach

Вот и все.

0 голосов
/ 24 февраля 2019

Ваши обе переменные не должны быть $easy, это может быть что-то вроде $easy as $easySingle.И добавить цикл внутри, как

@foreach($easy as $easySingle)
    foreach ($easySingle->sbj_topics as $topic) {
      $topic->property;
    }   
@endforeach   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...