Laravel Relationship无法在服务器上运行

时间:2017-11-09 20:56:33

标签: laravel server relationship

我的项目在本地主机上正常运行,但在服务器上,只在课程页面上收到错误。

主题模型

    class Subjects extends Model
  {
    public function category()
    {
        return $this->belongsTo('Lea\Category');
    }
    public function lesson()
    {
        return $this->hasMany('Lea\Lessons');
    }
    public function chapter()
    {
        return $this->hasMany('Lea\Chapters');
    }
    public function users()
    {
        return $this->belongsToMany('Lea\User', 'subject_user', 'subject_id', 'user_id');
    }
  }

课程模型

    class Lessons extends Model
{
    public function chapter()
    {
        return $this->belongsTo('Lea\Chapters');
    }
    public function subject()
    {
        return $this->belongsTo('Lea\Subjects', 'subject_id');
    }
    public function category()
    {
        return $this->belongsTo('Lea\Category');
    }

}

我的控制器课程有如下方法索引。

public function index()
    {

        $lessons = lessons::orderBy('id', 'asc')->paginate(5);
        return view('admin.lessons.index')->withLessons($lessons);
    }

我呼叫主题名称的方式如下所示。第一个主题是关系主题,第二个主题是主题名称保存在db中的字段名称。使用foreach获取如下数据:

@foreach ($lessons as $lesson)
{{$lesson->subject->subject}}
@endforeach

主题表模式是

id
subject
admin_id
users_id
category_id
created_at
updated_at
课程表格架构是

id
title
slug
category_id
subject_id
chapter_id
users_id
content
image

2 个答案:

答案 0 :(得分:0)

那更像是它;)

只需编辑将对象传递给以下内容的方式:

...
return view('admin.lessons.index')->with(compact('lessons'));

这是做什么的:

compact()基本上通过它的名称($ lessons)获取对象/变量,并将其传递给具有相同名称的视图。

另一种方法是将其写为:

...   
return view('admin.lessons.index')->with('lessons', $lessons);

干杯!

答案 1 :(得分:0)

您在服务器而不是本地计算机上收到错误的原因是您的服务器数据库为空(或者至少有较少的记录)。

{{$lesson->subject->subject}}

课程没有主题,所以它是空的。并且你试图得到一个空的subject

如果您正在使用Laravel 5.5,则可以使用optional()方法包装主题。

{{optional($lesson->subject)->subject}}

< Laravel 5.5 {{$lesson->subject ? $lesson->subject->subject : ''}}