【问题标题】:Error : Method Illuminate\Database\Eloquent\Collection::StudentInfo does not exist. (Laravel 5.6)错误:方法 Illuminate\Database\Eloquent\Collection::StudentInfo 不存在。 (Laravel 5.6)
【发布时间】:2019-02-23 00:46:45
【问题描述】:

我是使用 Eloquent 制作连接表的新手。我想加入 3 张桌子。但它告诉我错误。我的错误是什么,如果有人注意到它会对我有所帮助。这里是表.... 在第一个表 Applications(id,u_id,program_name) 第二个表 StudentInfos(id,u_id,.....) 第三个表 users(id,.. ...)

在应用模型中

public function StudentInfo()
{
    return $this->hasOne('App\StudentInfo', 'u_id', 'u_id');

}

在 StudentInfo 模型中

public function User()
{
    return $this->hasOne('App\user', 'u_id', 'id');

}

来自控制器

 public function view_application($id)
  {
    $vu_data = Application::where('id', $id)->get();
    $vu_data2 = $vu_data->StudentInfo()->get();
    return $vu_data2;

  }

【问题讨论】:

    标签: laravel laravel-5 laravel-5.2


    【解决方案1】:
    $vu_data2 = $vu_data->StudentInfo()->get();
    

    正在返回一个集合,而不仅仅是一个应用程序模型。将“get()”更改为“first()”,这将修复您的第一个错误。所以改变:

    $vu_data = Application::where('id', $id)->get();
    

    $vu_data = Application::where('id', $id)->first();
    

    【讨论】:

      【解决方案2】:

      当您执行get() 时,它会返回一个集合。你可以这样做:

      $vu_data = Application::findOrFail($id);
      $student = $vu_data->StudentInfo;
      $user = $student->User;
      

      【讨论】:

      • 谢谢,如果我也想加入用户,那应该是什么?
      • 更新了我的答案,请检查
      • 非常感谢。是否需要 return $this->belongsTo(Application::class);
      • 是的,你应该属于用户模型
      猜你喜欢
      • 1970-01-01
      • 2021-06-08
      • 2021-03-26
      • 1970-01-01
      • 2021-03-19
      • 2021-05-30
      • 2020-03-25
      • 1970-01-01
      • 2021-08-02
      相关资源
      最近更新 更多