Error : Method Illuminate\Database\Eloquent\Collection::StudentInfo does not exist. (Laravel 5.6)

I am new to make join tables with Eloquent. I want to join 3 tables. But it shows me error. What's my mistake, if anyone notice it will be helpful for me. Here is tables.... In 1st table Applications(id,u_id,program_name) 2nd table StudentInfos(id,u_id,.....) 3rd table users(id,.....)

in Application model

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

}

in StudentInfo model

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

}

From controller

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

  }

Upvotes: 1

Views: 1240

Answers (2)

Mihir Bhende
Mihir Bhende

Reputation: 9045

When you do get(), it returns a collection. You can do :

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

Upvotes: 0

grizzb
grizzb

Reputation: 359

$vu_data2 = $vu_data->StudentInfo()->get();

is returning a collection and not just a single Application Model. Change "get()" to "first()", and this will fix your first error. So change:

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

to

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

Upvotes: 1

Related Questions