无法在laravel 5.7中定义关系

时间:2019-02-24 07:17:12

标签: php laravel orm

我有两个表,分别为sbj_topicsdifficulty_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 }} 试图获取未定义的属性!

建立关系的主要目的是显示主题名称,因为我在sbj_topic_id表中将外键设置为difficulty_level_sbj_topic,因此如果有人还有其他想法可以做到,而没有会很棒的关系。

2 个答案:

答案 0 :(得分:3)

分解一下:

  • SbjTopic-具有许多差异级别
  • 一个difflevel属于aSbjTopic

有了这样的理解,我可以看到您正在获得difflevels(DiffiLvlSbjTopic)。这实际上是您要传递给刀片服务器的内容。

所以首先,请通过指定外键来完成您的关系。即: 在SbjTopics模型中:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Run r = new Run("World");
        r.Background = new SolidColorBrush(Colors.LightCyan);

        //Append run to existing run
        var p = flowdoc.Document.Blocks.OfType<Paragraph>().First();
        p.Inlines.Add(r);
    }

与此相关,您知道在'difficulty_level_sbj_topic'中您必须具有列public function difficulty_level_sbj_topic() { return $this->hasMany('App\DiffiLvlSbjTopic', 'subject_id'); } 。 现在,在您的DiffiLvlSbjTopic模型中定义反向关系:

subject_id

将所有这些都放置在您的控制器或路由中,您需要做的就是获取DiffiLvlSbjTopic模型属性。例如:

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

最后,您认为:

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

就是这样。

答案 1 :(得分:2)

您的两个变量均不应为showCardIds,而应类似于hidden。并在里面添加一个循环

$easy