如何访问 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,
];
}
工作正常!
我在 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,
];
}
工作正常!