php - 无法在 laravel 5.7 中定义关系

标签 php laravel orm

我有两个表 sbj_topicsdifficulty_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');
}

之后,我将数据返回到 View :

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

然后在 View 中我做了这个:

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

但是页面是空白的,当我这样做时{{ $easy->sbj_topics->sbj_topic_name }} 尝试获取未定义的属性!来了。

创建关系的主要目的是显示主题名称,因为我的外键sbj_topic_iddifficulty_level_sbj_topic因此,如果有人有任何其他想法可以在没有关系的情况下做到这一点,那就太棒了。

最佳答案

分解:

  • SbjTopic - 有许多不同级别
  • difflevel 属于 aSbjTopic

有了这种理解,我可以看到您正在获取差异级别(DiffiLvlSbjTopic)。这实际上就是您传递给 Blade 的内容。

所以首先:通过指定外键来完成您的关系。 IE: 在 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');
}

将所有这些都放在 Controller 或路由中后,您所需要做的就是获取 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

就是这样。

关于php - 无法在 laravel 5.7 中定义关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54849647/

相关文章:

php - 如何将数组与表连接起来(数组中的链接ID与表ID)

hibernate 。删除更新子列表

java - spring data jpa中的store是什么?

javascript - 如何在数据库更新时向客户端发送警报,例如 Facebook 聊天

php mysql : joining two tables

php - 在 Laravel 验证期间获取列表的索引并显示在错误消息中

json - Sequelize : How to return relationships as JSON attribute?

php - 获取递归或链接列表(如表)中当前行的级别,

php - 在给定时间段内按月对查询结果进行分组

javascript - 模态文本在其他模态中重复