【问题标题】:Laravel: alter notifications table and insert custom dataLaravel:更改通知表并插入自定义数据
【发布时间】:2021-07-23 19:09:14
【问题描述】:

我正在实现 Laravel 通知系统。我已经在 DB 中进行了插入测试,它运行良好,但是在注册通知时,我看到它带有“奇怪”的数据(从我的角度来看)。

id type notifiable_type notifiable_id
634db0ee-a9c0... App\Notifications\HeatMapNotification App\Models\User 1

我不明白为什么“id”列带有 uuid 类型的 id。我的意思是,使用自动增量 ID 就足够了(我认为)。

在“类型”列中,我想插入一个更简单的文本。

我认为“notifiable_type”列没有任何用处。在我的情况下,应通知的实体将始终是用户。

我还想更改一些列名(notifiable_id --> user_id)

如何进行这些更改?

非常感谢您。

【问题讨论】:

  • 你可以切换到使用你自己的通知系统,它本质上是 Laravel 的副本,或者你可以离开它,这是我推荐的。你永远不知道,你可能想在未来通知其他事情。
  • @kemp 是的,我理解你,但是当我真的只想知道实体的类型(“heat_map”)时,我发现看到像“App\Notifications\HeatMapNotification”这样的文本字符串很烦人,甚至其他人都喜欢应通报实体的类型。什么时候可以是用户以外的东西? uuid 列类型对我来说也没有任何意义。我真的不明白他们制作这张桌子时的想法。
  • 他们试图提供最大的灵活性。考虑一个有两种用户类型的应用程序:医生和病人。他们都登录系统并可以接收通知。另外,如果您将通知放在子目录中怎么办? App\Notifications\Appointment\ReminderApp\Notifications\Prescription\Reminder 都将被称为提醒。那么,为什么不只存储完整的类名呢?
  • @kemp,是的,你是对的。无论如何,就我而言,这不是必需的,所以我将等待帮助。感谢您的提示 kemp :)

标签: laravel laravel-8


【解决方案1】:

查看 DatabaseNotification 类并查看您的一些要求。例如默认有

  /**
     * The "type" of the primary key ID.
     *
     * @var string
     */
    protected $keyType = 'string';

    /**
     * Indicates if the IDs are auto-incrementing.
     *
     * @var bool
     */
    public $incrementing = false;

也许您可以启用自动增量 ID。 在 DatabaseChannel 类中是在通知表中存储一些数据时

protected function buildPayload($notifiable, Notification $notification)
    {
        return [
            'id' => $notification->id,
            'type' => get_class($notification),
            'data' => $this->getData($notifiable, $notification),
            'read_at' => null,
        ];
    }

我想到类型列,通知类型更容易转换

if ($notification->type === HeatMapNotification::class)

和 notifiable_type,你可以管理很多不同的用户模型...取决于你开发的项目,所以 Laravel 进入这个。

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 2018-12-15
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2020-09-03
    • 2019-10-01
    • 2017-09-24
    • 1970-01-01
    相关资源
    最近更新 更多