【问题标题】:How can I save user's setting for notifications laravel5 and mysql [closed]如何保存通知laravel5和mysql的用户设置[关闭]
【发布时间】:2016-02-28 02:13:49
【问题描述】:

我正在为移动应用程序构建 Restful Api。如果用户已在其个人资料中将通知设置保存为 true,我需要将通知推送给用户。

我创建了以下结构:

用户表:

id 姓名 电子邮件

1 测试 test@test.com

2 Test1 test1@test1.com

通知表:

id notification_name

1 点赞通知

2 评论通知

user_notification 表:

id notification_id user_id 值(0=off,1=on)

1            1                1         0   

2            2                 1         1   

3            1                1         1   

4            2                 1         1   

在上面的表格结构中,我创建了一个带有额外字段value 的数据透视表,用于保存用户的设置。

有没有其他好方法可以做到这一点,我可以最大限度地减少我的查询并快速响应

【问题讨论】:

  • kbd 前缀是什么???
  • 我不知道如何显示有问题的表格,这就是我使用 kbd 进行格式化的原因
  • SO 有一个代码按钮“{}”,可将文本缩进 4 个空格。缩进文本呈现为等宽代码
  • 好的,谢谢,我会记住这一点的
  • 如果您只有 100 个用户,MySQL 将足够快,无需重新设计。

标签: php mysql optimization laravel-5.1


【解决方案1】:

您的数据透视表应该只包含定义的两个引用,notification_iduser_id。向其中添加更多字段会将其否定为数据透视表。

您应该将value 字段放在您的notifications 表中,也许将其命名为is_active 更好。是你的通知有一个设置,对吧?因此,设置在通知上而不是仅用于连接两个表的数据透视表是有意义的。

另外,作为建议,按照 Laravel 中的常规约定,让您的数据透视表按字母顺序排列 (see the docs)

在您的 User.php 模型中,添加关系

public function notifications() {
    return $this->hasMany(App\Notification::class, 'notification_user');
}

查询这个关系时,你要做的就是:

foreach($user->notifications as $notification) {
    if($notification->is_active) {
        // do something
    }
}

【讨论】:

  • 感谢您的回答,请您解释一下User.php 中的notifications 函数,这里的notification_user 是什么?
  • notification_user 是您的 user_notification 表。我切换了两者以遵循数据透视表的字母顺序。至于关系。当您有多对多关系时(一个通知有很多用户,并且一个用户有很多通知),您可以将第二个参数添加到 hasMany 方法中,即数据透视表。 laravel.com/docs/5.1/eloquent-relationships#many-to-many
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多