【问题标题】:Laravel 4: making a combination of values/columns uniqueLaravel 4:使值/列的组合独一无二
【发布时间】:2013-06-04 03:38:15
【问题描述】:

我正在使用 Laravel 4 在我的数据库中导入一堆 csv 条目。

我不能真正指出必须是唯一的一列,它是 5 列的组合,使其独一无二。但是:如何在 Laravel 中定义这一点?

选项 1:架构构建器
您可以使用 $table->unique('email') 方法,但这似乎只允许一列,而不是列的组合。

选项 2:验证
不太可取,但我可以在插入模型之前对其进行验证。但是,再次使用 'unique:[table]' 验证规则,当只有一个列值不是唯一的而不是它们的组合时,它将返回错误。

谁能告诉我该怎么做?
我确定我错过了一些东西,但我可以朝正确的方向推动:-)

谢谢,

节食

【问题讨论】:

    标签: laravel laravel-4


    【解决方案1】:

    你可以组合:

    $table->unique( array('email','name') );
    

    几乎所有 Laravel 中的东西都可以接受数组来做任何你需要做的事情。

    【讨论】:

    • 但是如何验证复合唯一键,我的意思是第二部分使用 laravel 验证。我看不懂 laravel 网站上的例子?
    • @HariHaraSudhan 是的,我想我也有同样的Question
    • Laravel 5.4 使用相同的语法。
    【解决方案2】:

    如 Antonio 所述,使用 Schema Builder 的 unique() 方法定义您的数据模型。

    此外,如果您想在模型上使用验证,请考虑我为多个 UNIQUE 索引自定义的 Validator 规则:https://github.com/felixkiss/uniquewith-validator

    【讨论】:

    • 感谢自定义验证器规则!将在 DB 约束之上使用它,依赖 DB 异常来处理程序似乎是错误的。
    【解决方案3】:

    你也可以这样做;

    $table->unique(["column1", "column2"], 'uq_columns');

    这意味着您将拥有所有列的唯一列组合,即 column1 和 column2

    【讨论】:

    • 我认为这是正确的答案。原始帖子要求一个场景,即 2 列必须是唯一的作为组合。因此,如here所述,使用两者定义了一个键。谢谢,我也在找这个。
    • @GaryPaluk,你错了。这个答案是关于,unique as a combination,最后一个参数是一个索引名。
    【解决方案4】:

    我知道这个问题是针对 Laravel 4 的,但我只是在搜索中发现了这个问题并找到了 Laravel >= 5.3 的解决方案

    这里是:

    当然,迁移可能看起来像

    $table->unique( array('email','name') );
    

    然后要验证这一点,您不需要使用自定义规则,只需使用高级规则:

    'email' => Rule::unique('users')->where(function ($query) use ($request) {
        return $query->where('name', $request->name);
    }),
    

    当然,您可能希望在此之前验证名称。名称应该是必需的,以便您可以完成以下内容:

    'name' => 'required|max:255',
    'email' => Rule::unique('users')->where(function ($query) use ($request) {
        return $query->where('name', $request->name);
    }),
    

    希望对你有帮助。

    【讨论】:

      【解决方案5】:

      你可以试试这个

      $table->string("name");
      $table->string("email")->unique("name")
      

      【讨论】:

      • 我不明白。为什么这会使电子邮件和姓名成为唯一的一对?
      猜你喜欢
      • 2013-01-30
      • 2014-10-19
      • 2011-02-05
      • 2011-09-27
      • 2015-01-21
      • 1970-01-01
      • 2015-08-22
      • 2018-12-11
      相关资源
      最近更新 更多