如何访问 M-M 关系中的列 Table In Laravel

How To Access A Column In M-M Relationship Table In Laravel

我在 laravel 中建立了多对多关系,用户可以在其中发布事件公告。

问题是我想使用关系从数据库中检索公告消息

这是我的代码:

数据库迁移:

   Schema::create('announcements', function (Blueprint $table) {
        $table->id();
        $table->text("message");
        $table->foreignId('user_id')->constrained()->cascadeOnDelete()->cascadeOnUpdate();
        $table->foreignId('event_id')->constrained()->cascadeOnDelete()->cascadeOnUpdate();
        $table->timestamps();
    });

事件模型:

public function announcements() {
    return $this->belongsToMany(User::class, 'announcements');
}

用户模型:

public function announcements() {
    return $this->belongsToMany(Event::class, 'announcements');
}

事件控制器:

 public function getEventAnnouncements($id) {
    $event = Event::find($id);


    $ann = [];
    $event->announcements->each(function ($a) use ($ann) {
        // echo $a;
        // $ann += $a->message;
    });

    return $ann;
}

我应该在控制器中写什么来获取messages列的内容?

您可以使用 pivot 关键字访问消息属性。

$event->announcements->pivot->message;

所以通过这种方式,您可以访问它。我有一条小建议,请将数据透视表 table 的名称更改为 user_event 以明确

我找到了解决方案!

首先我应该在模型中添加一个枢轴

事件模型:

public function announcements() {
   return $this->belongsToMany(User::class, 'announcements')->withPivot('message');
}

用户模型:

public function announcements() {
    return $this->belongsToMany(Event::class, 'announcements')->withPivot('message');
}

最后遍历结果以获取消息。

事件控制器:

    $ann = [];
    foreach ($event->announcements as $a) {
        $ann[] = [
            "name" => $a->name,
            "announcement" => $a->pivot->message,
            "created_at" => $a->pivot->created_at,
        ];
    }

工作正常!