简体   繁体   English

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

[英]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 我有laravel的基本身份验证系统,名为SecurityQuestion的自定义模型和名为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 SomeController

First option 第一选择

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

Error: Undefined property: Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany::$pivot 错误:不确定的属性: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. 基本上,我颠倒了顺序,将“ user_id”参数放在“ question_id”参数之前。

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? 您是否在控制器中为auth添加了名称空间? 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 在用户模型中尝试使用hasMany而不是belongsToMany

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. 尝试这样,withPivot函数需要一个参数:数组或字符串。

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. 并且'question_id'和'user_id'不需要在withPivot函数中,因为它们是外键。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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