【问题标题】:Laravel Relationship not working on serverLaravel 关系在服务器上不起作用
【发布时间】:2017-11-09 20:56:33
【问题描述】:

我的项目在本地主机上运行良好,但在服务器上,仅在课程页面上出现错误。

主题模型是

    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);
    }

我调用主题名称的方式如下所示。第一个主题是关系主题,第二个主题是主题名称保存在数据库中的字段名称。使用 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

【问题讨论】:

  • 表中的字段名称是什么?您是否可能遵循与 subject_id 和 subject_user 相同的逻辑,并实际将字段命名为“subject_name”?问题似乎在您的主题表中
  • 如果字段名有问题,那么它应该给我一些 json 输出,把这个代码 {{$lesson->subject}} 但我在服务器上得到 null 但在 localhost 上得到 json
  • 您是否通过控制器将 $lesson 对象持久化到您的视图中?
  • 这个错误可能发生的级别太多了,所以如果我们要找到问题,您必须提供所有代码
  • 我用控制器和视图编辑了我的问题

标签: laravel server relationship


【解决方案1】:

这更像是;)

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

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

这是在做什么:

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

另一种方法是将其写为:

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

干杯!

【讨论】:

  • 返回不是问题,我用我的方法得到了非关系值。只是没有显示课程和主题的关系值,而与类别的关系也在起作用
  • 为什么你的字段名是subject_id?将其保留为 id 不是更简单吗?如果您说类别有效,则可能是您为主题表定义的主键存在问题。
  • 它在课表中的外键。
  • 请发布您的课程和科目架构
【解决方案2】:

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

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

这节课没有主题,所以它是空的。而你试图获得一个空属性subject

如果您使用的是 Laravel 5.5,您可以将主题包装在 optional() 方法中。

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

{{$lesson->subject ? $lesson->subject->subject : ''}}

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 2021-08-31
    • 2016-01-14
    • 2021-07-09
    • 2019-05-13
    • 2016-04-16
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多