Laravel许多关系无法获取数据透视表

时间:2019-02-19 10:24:37

标签: php laravel

我有laravel的基本身份验证系统,一个名为SecurityQuestion的自定义模型和一个名为 securityquestion_user

的数据透视表。

用户

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

SomeController

第一个选项

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

错误:未定义的属性:Illuminate \ Database \ Eloquent \ Relations \ BelongsToMany :: $ pivot

第二个选项

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

错误:返回false

4 个答案:

答案 0 :(得分:1)

我知道了,

我修改了与此的关系:

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

基本上我颠倒了顺序,将“ user_id”参数放在“ question_id”参数之前。

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

非常感谢您的关注。

答案 1 :(得分:0)

您是否在控制器中添加了用于auth的名称空间?  喜欢:

use Auth;

如果未导入,请使用它:

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

并在用户模型中更正您的功能


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

因为您的第一个选择是正确的!

答案 2 :(得分:0)

在用户模型中尝试使用hasMany代替EmiratesToMany

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

答案 3 :(得分:0)

尝试这样,withPivot函数需要一个参数:数组或字符串。

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

withPivot函数中不需要'question_id'和'user_id',因为它们是外键。