我有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
答案 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',因为它们是外键。