Не удается получить двунаправленные данные из сводной таблицы - PullRequest
1 голос
/ 16 марта 2019

У меня есть события и участники. Участники, которые представлены в виде профилей, могут участвовать в мероприятиях. У меня есть сводная таблица с именем event_participants.

Отношение в профиле

public function events()
    {
        return $this->belongsToMany('App\Event', 'event_participants', 'event_id', 'profile_id')->withTimestamps();
    }

Отношение в событии

public function participants()
    {
        return $this->belongsToMany('App\Profile', 'event_participants', 'event_id', 'profile_id')->withTimestamps();
    }

Я хочу связать участников с их уважающими событиями, получив событие, а затем прикрепив профиль

$event->participants()->attach($profile['id']);

Я могу получить список участников мероприятия, сделав это

$event->participants

Но моя проблема в том, что, когда я пытаюсь получить события профиля, который участвует в событиях, делая это

$profile->events

Я всегда получаю нулевую / пустую коллекцию. Я что-то упускаю? Благодарю.

Обновление: моя миграция для сводной таблицы выглядит следующим образом

Schema::create('event_participants', function (Blueprint $table) {
            $table->integer('profile_id')->unsigned()->index();
            $table->foreign('profile_id')->references('id')->on('profiles')->onDelete('cascade');
            $table->integer('event_id')->unsigned()->index();
            $table->foreign('event_id')->references('id')->on('events')->onDelete('cascade');
            $table->timestamps();
        });

Также, если я попытаюсь прикрепить события к профилям, например $profile->events()->attach($eventId);

Я получаю следующую ошибку:

"SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database`.`event_participants`, CONSTRAINT `event_participants_profile_id_foreign` FOREIGN KEY (`profile_id`) REFERENCES `profiles` (`id`) ON DELETE CASCADE) (SQL: insert into `event_participants` (`created_at`, `event_id`, `profile_id`, `updated_at`) values (2019-03-16 07:33:03, 1, 17, 2019-03-16 07:33:03))"

1 Ответ

2 голосов
/ 16 марта 2019

Здравствуйте, вы должны перевернуть ключи в отношении в модели событий как таковые:

return $this->belongsToMany('App\Event', 'event_participants', 'profile_id', 'event_id')->withTimestamps();

Вы используете одно и то же отношение в обоих направлениях.

Третий аргумент - это имя внешнего ключа модели, для которой вы определяете отношение, а четвертый аргумент - это имя внешнего ключа модели, к которой вы присоединяетесь.

Согласно документам Laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...