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

Error: Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$pivot

Второй вариант

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

Error: returns false

Можете попробовать ->withPivot(['x','y','z']), -добавляя квадратные скобки-

mutas 19.02.2019 11:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
412
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы добавили пространство имен для аутентификации в контроллере? Нравится:

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; вверху файла.

John Doe 19.02.2019 11:51

Ладно! Я не знаю, что вы импортировали его! но я реализовал это в своем проекте, он работает правильно! Правильно ли вы дали отношения? Можете ли вы перепроверить проверить это!

Kinjal Vithalani 19.02.2019 11:57

Попробуйте использовать 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>';
    }

Большое спасибо за ваш интерес.

Другие вопросы по теме