简体   繁体   中英

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

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.

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!!

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM