John Doe
John Doe

Reputation: 601

Laravel many many relation cannot get pivot table

I have laravel's basic auth system, a custom model called SecurityQuestion and a pivot table called securityquestion_user

User

public function securityquestion_user() {
    return $this->belongsToMany(SecurityQuestion::class, 'securityquestion_user', 'question_id', 'user_id')->withPivot('question_id', 'user_id', 'answer');
}

SomeController

First option

foreach(Auth::user()->securityquestion_user as $question) {
    dd($question);
}

Error: Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$pivot

Second Option

foreach(Auth::user()->securityquestion_user() as $question) {
    dd($question);
}

Error: returns false

Upvotes: 0

Views: 887

Answers (4)

John Doe
John Doe

Reputation: 601

Ok guys I got it,

I modified the relation to this:

public function securityquestion_user() {
    return $this->belongsToMany('App\SecurityQuestion', 'securityquestion_user', 'user_id', 'question_id')->withPivot('question_id', 'user_id', 'answer');
}

Basically I reversed the order and place 'user_id' parameter before 'question_id' parameter.

foreach(Auth::user()->securityquestion_user as $question) {
        print '<pre>';
        print_r($question->pivot->answer);
        print '</pre>';
    }

Thank you very much for you interest.

Upvotes: 1

mutas
mutas

Reputation: 359

Try like this, withPivot function expects one parameter: array or string.

public function securityquestion_user() {
    return $this
        ->belongsToMany(SecurityQuestion::class, 'securityquestion_user', 'question_id', 'user_id')
        ->withPivot(['question_id', 'user_id', 'answer']);
}

And 'question_id' and 'user_id' are not necessary to be in withPivot function, since they are the foreign keys.

Upvotes: 0

Rohan Thomas
Rohan Thomas

Reputation: 1

Try by using hasMany instead of belongsToMany in user model

public function securityquestion_user() {
  return $this->hasMany (SecurityQuestion::class, 'securityquestion_user', 'question_id', 'user_id')->withPivot('question_id', 'user_id', 'answer');
}

Upvotes: 0

Kinjal
Kinjal

Reputation: 91

Have you added namespace for auth in controller? Like:

use Auth;

If not imported then use this for it:

foreach(\Auth::user()->securityquestion_user as $question) {
    dd($question);
}

And also correct your function in user model


public function securityquestion_user() {
    return $this->belongsToMany('App\SecurityQuestion::class', 'securityquestion_user', 'question_id', 'user_id')->withPivot('question_id', 'user_id', 'answer');
}

because your first option is correct except it!!

Upvotes: 0

Related Questions