无法从数据透视表中获取双向数据

时间:2019-03-16 07:23:20

标签: php laravel eloquent

我有活动和参与者。代表个人资料的参与者可以参加活动。我有一个名为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

我总是得到null / empty集合。有什么我想念的吗?谢谢。

更新:我对数据透视表的迁移如下

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 个答案:

答案 0 :(得分:2)

您好,您应该像这样翻转事件模型中关系中的键:

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

您在两个方向上都使用相同的关系。

  

第三个参数是要在其上定义关系的模型的外键名称,而第四个参数是要加入的模型的外键名称。

根据laravel文档