【问题标题】:Laravel 5.2 Validation unique with where clause doesn't work as expectedLaravel 5.2 Validation unique with where 子句不能按预期工作
【发布时间】:2016-10-16 22:21:57
【问题描述】:

我正在使用 laravel 5.2 开发 ERP 我需要这样做:

当用户尝试创建新银行时,程序将执行验证以检查给定的公司名称和给定的 ABI 代码是否唯一。执行验证时,程序将忽略所有那些在 deleted 列上的值为 1 的记录,包括企业名称和 ABI。

问题是它完全忽略了我的 where 子句。 这是验证规则:

$this->validate($request, [
        'business_name'   => 'required|max:255|unique:banks,deleted,0',
        'abi'               => 'required|max:5|min:5|unique:banks,deleted,0'
    ]);

银行表中的列是:

  • 身份证
  • 企业名称
  • 阿比
  • 已禁用
  • 已删除
  • // laravel 时间戳

如果我没有误解 Laravel 5.2 的文档,这是在唯一过滤器中设置 where 子句的正确方法...?

我们将不胜感激任何帮助!

【问题讨论】:

    标签: php mysql validation laravel-5.2


    【解决方案1】:

    您作为第三个参数传递的是主键的值,因此由于您没有传递标识键的第四个参数,它会搜索带有id 的记录,默认情况下,它的值为@ 987654322@.

    因此,您需要传递第四个参数,这样,它将忽略所有具有已删除属性且值为1 的行。

    $this->validate($request, [
        'business_name'   => 'required|max:255|unique:banks,business_name,1,deleted',
        'abi'             => 'required|max:5|min:5|unique:banks,abi,1,deleted'
    ]);
    

    【讨论】:

    • 还是什么都没有 :( 它一直忽略任何记录。它让我一遍又一遍地添加相同的记录。无论删除的值是什么。我有点困惑...... oO
    • 当然没有 :) 因为我们检查的是唯一删除除了1,更新的答案,逻辑有问题,如果它没有被删除我猜它应该检查唯一,对吧?跨度>
    • 仍然无法正常工作.. 相反,我注意到它提示错误,即使在全新的记录上也已采用该字段。我确定它们不在数据库中
    • 现在可以使用了!那么,你能解释一下这个巫术吗?我们正在检查银行表(第 1 个参数)的唯一性,必须是唯一的列 business_name(第 2 个参数),从检查中排除删除的列(第 4 个参数)的 1(第 3 个参数)的所有值?我得到了吗?我错了还是文件说的是别的? O.o
    • 是的,你是对的,完全一样。它在必须是唯一的给定列上搜索银行表,其中排除了已删除属性等于 1 的行。另一方面,它查找业务名称和 abi 属性的唯一性,没有界限.例如,如果数据库中已经保存了另一条具有相同企业名称的记录,但与您尝试插入的记录相比,它又是另一个 abi,​​它将再次引发错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2015-05-24
    • 1970-01-01
    相关资源
    最近更新 更多