我创建的插件有两个具有以下结构的表:
CREATE TABLE notifications (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
`sent_at` DATETIME NULL DEFAULT NULL,
`title` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`message` TEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`photo` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`icon` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci'
)
CREATE TABLE notification_recipients(
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
`notification_id` INT(11) NOT NULL,
`user_id` INT(11) NOT NULL,
`seen` TINYINT(1) NOT NULL,
`archived` TINYINT(1) NOT NULL
)
我不知道如何创建一个关系来显示后端选择字段,在这里我可以选择用户以获取通知,在模型中应该做什么。
稍后,我将在控制器中处理表单,以便为所选的每个用户创建notification_recipients
行。
在阅读并观看了有关关系的教程之后,我逐渐了解到我可能需要数据透视表。
但是我需要notification_recipients
表,以便稍后处理通知以在前端显示自定义查询(seen
和archived
字段将确定前端的可见性)。
我该怎么做?我不明白我要建立的关系,请问我有第三张桌子吗?
谢谢,最好的问候。
更新(找到解决方案):
我添加了一个名为“用户”的复选框列表。 根据OctoberCMS的文档,您可以将模型中的选项添加到Radio字段中,并且Checkbox Lists的工作方式相同。
现在,我通过在用于表单的模型中执行此操作来使它起作用:
use RainLab\User\Models\User;
...
public function getUsersOptions($value, $formData)
{
$users = User::all();
$mapped = $users->mapWithKeys(function ($item) {
return [$item['id'] => $item['name']];
});
return $mapped;
}
效果很好,我为所有用户提供了ID。