У меня есть две таблицы как sbj_topics и difficulty_level_sbj_topic, поэтому я хочу определить отношения между ними для извлечения записей, поэтому для установления отношений я сделал это,
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, поэтому, если у кого-то есть другая идея сделать это без отношения, это будет здорово.
да, он возвращается, но не значения отношений
sbj_topic_id ваш FK прав? Тогда что такое subject_id? $easy = DiffiLvlSbjTopic::where(['subject_id' => $id, 'difficulty_level_id' => 2])->get();У меня есть другое поле в таблице difficulty_level_sbj_topic.
@UsmanDeveloper У предмета много уровней сложности или у уровня сложности много предметов? Посмотрите на порядок ваших отношений. Кроме того, явно указывайте внешние ключи, чтобы Laravel ничего не предполагал сам по себе.






Ваши обе переменные не должны быть $easy, это может быть что-то вроде $easy as $easySingle. И добавьте петлю внутри, например
@foreach($easy as $easySingle)
foreach ($easySingle->sbj_topics as $topic) {
$topic->property;
}
@endforeach
Приходит ошибка Недопустимый аргумент для foreach()
опять пусто братан думаю в отношениях бардак
снова ошибка Недопустимый аргумент для foreach() тоже сделала это sbj_topics()
Разбейте это:
С этим пониманием я вижу, что вы получаете difflevels (DiffiLvlSbjTopic). На самом деле это то, что вы передаете своему лезвию.
Итак, во-первых: завершите свои отношения, указав внешние ключи. то есть: В модели SbjTopics:
public function difficulty_level_sbj_topic() {
return $this->hasMany('App\DiffiLvlSbjTopic', 'subject_id');
}
при этом вы знаете, что в 'difficulty_level_sbj_topic' у вас должен быть столбец 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
Вот и все.
OMG, это здорово, так что у меня есть только ошибка, что я не давал внешний ключ в обратном отношении.
@UsmanDeveloper Ваша большая ошибка заключается в том, что вы не следуете соглашению об именах, предложенному в документах. Следуя инструкциям, вы избежите на 90 % таких невынужденных ошибок.
@Tpojka Это правда, но указывать внешние ключи, чтобы избежать магии, обычно не так уж и плохо.
Это возврат коллекции?
dd($easy)