【问题标题】:Laravel many many relation cannot get pivot tableLaravel 许多关系无法获取数据透视表
【发布时间】:2019-07-12 19:42:38
【问题描述】:

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

一些控制器

第一选择

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

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

第二个选项

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

错误:返回错误

【问题讨论】:

  • 你可以试试 ->withPivot(['x','y','z']), -添加方括号-

标签: php laravel


【解决方案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>';
    }

非常感谢您的关注。

【讨论】:

    【解决方案2】:

    您是否在控制器中为身份验证添加了命名空间? 喜欢:

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

    因为你的第一个选项是正确的,除了它!

    【讨论】:

    • 我用过 Illuminate\Support\Facades\Auth;在顶部,所以它正在工作。你写的belongToMany 是错误的。首先,您输入 'App\SecurityQuestion' 作为字符串(带有引号),也无需指定 App\,因为我使用了 App\SecurityQustion;在文件的顶部。
    • 好的!不知道你是不是进口的!但我已经在我的项目中实现了它,它工作正常!你是否正确地给予了关系?你能重新检查一下吗!
    【解决方案3】:

    尝试在用户模型中使用 hasMany 而不是 belongsToMany

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

    【讨论】:

      【解决方案4】:

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

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

      而 'question_id' 和 'user_id' 不是必须在 withPivot 函数中,因为它们是外键。

      【讨论】:

        猜你喜欢
        • 2016-12-05
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        • 2014-08-05
        • 2015-02-10
        • 1970-01-01
        相关资源
        最近更新 更多