У меня есть базовая система аутентификации 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);
}
Error: Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$pivot
Второй вариант
foreach(Auth::user()->securityquestion_user() as $question) {
dd($question);
}
Error: returns false






Вы добавили пространство имен для аутентификации в контроллере? Нравится:
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; наверху, так что это работает. ПринадлежностьToMany, которую вы написали, неверна. Прежде всего, вы вводите «App\SecurityQuestion» в виде строки (с кавычками), также нет необходимости указывать App\, потому что я использую App\SecurityQustion; вверху файла.
Ладно! Я не знаю, что вы импортировали его! но я реализовал это в своем проекте, он работает правильно! Правильно ли вы дали отношения? Можете ли вы перепроверить проверить это!
Попробуйте использовать hasMany вместо ownToMany в пользовательской модели.
public function securityquestion_user() {
return $this->hasMany (SecurityQuestion::class, 'securityquestion_user', 'question_id', 'user_id')->withPivot('question_id', 'user_id', 'answer');
}
Попробуйте так, функция 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, поскольку они являются внешними ключами.
Хорошо, ребята, я понял,
Я изменил отношение к этому:
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>';
}
Большое спасибо за ваш интерес.
Можете попробовать ->withPivot(['x','y','z']), -добавляя квадратные скобки-