Laravel 5 自定义验证 - 自定义 MySQL 查询

Posted

技术标签:

【中文标题】Laravel 5 自定义验证 - 自定义 MySQL 查询【英文标题】:Laravel 5 Custom Validation - Custom MySQL Query 【发布时间】:2016-09-01 13:47:36 【问题描述】:

我正在设计一个涉及检查促销代码的应用。我已经研究过(谷歌),但我找不到可以解释解决类似问题的资源,或者可以翻译成这个问题的问题。

表:用户

ID、姓名、电子邮件等

表格:代码(获奖代码)

ID、代码、值

表格:SubmittedCodes(用户提交的代码)

Id、User_id、代码、时间戳

用户会检查他提交的代码在哪里有任何价值,如果特定用户想要提交太多代码,提交的代码会被记住。 验证将被退回查看。保存在 SubmittedCodes 表中。

请问我的做法是否正确?我应该使用自定义验证吗?我应该构建自定义助手吗?也许是一些特定的 mysql 查询?

我不想让任何人为我编写代码,只需要朝着正确的方向轻推。我想我知道如何使用搜索引擎,但我可能漏掉了一些。

我已经完成了关于自定义验证的简单教程,但这个教程有其他目标,我无法将它用于我的要求。

目前我已经建立了带有消息和管理员的注册/注册用户管理系统,但这部分/模块有点困难。

我上面提到的资源链接: https://laravel.com/docs/5.2/validation#custom-validation-rules https://scotch.io/tutorials/laravel-form-validation

【问题讨论】:

【参考方案1】:

正如@haakym 所述,您可以使用exists 规则首先验证该代码是否存在。

$this->validate($request, [
    'user_submitted_code' => 'exists:codes,code'
]);

完成后,您需要检查该代码是否已被特定用户使用。

$check = SubmittedCodes::where(
    ['user_id', $user_id],
    ['code', $user_submitted_code]
)->exists();

【讨论】:

【参考方案2】:

我无法完全理解您的问题,但根据我收集的信息(如果我错了,请纠正我)您希望用户提交代码,如果它与代码表中的代码匹配,则存储它在提交的代码表中,对吧?

在这种情况下,您可以使用exists 规则,因为您正在检查如果代码表中存在代码。

因此,在您的表单提交验证器中,您将添加如下规则:

'user_submitted_code' => 'exists:codes,code'

如果字段名称与数据库中的列名称匹配,您也可以简写它

'code' => 'exists:codes'

希望对您有所帮助!如果我没有解决您的问题,请发表评论。

【讨论】:

以上是关于Laravel 5 自定义验证 - 自定义 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 的自定义验证对象/类

Laravel 5.3 自定义验证消息数组

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

Laravel 5 中的自定义验证器

Laravel 5.4 - 如何为同一个自定义验证规则使用多个错误消息

Laravel 5.5 FormRequest 自定义表单请求验证类