首页 文章

Laravel 4:使值/列的组合独特

提问于
浏览
30

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

我不能指出一个必须是唯一的列,它是5列的组合,使其独特 . 但是:如何在Laravel中定义这个?

Option 1: schema builder
您可以使用$ table-> unique('email')方法,但这似乎只允许一列,而不是列的组合 .

Option 2: Validation
不太可取,但我可以在插入之前验证模型 . 但是,再次使用'unique:[table]'验证规则时,如果其中一个列值不唯一,则会返回错误,而不是它们的组合 .

谁能告诉我应该怎么做呢?
我错过了什么,但我可以用正确的方向推动:-)

谢谢,

迪特

5 回答

  • 76

    你可以结合:

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

    Laravel中的所有内容都会接受数组,以便通过“多个”来执行您需要的任何操作 .

  • 0

    正如Antonio所提到的,使用Schema Builder的 unique() 方法来定义您的数据模型 .

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

  • 0

    你也可以这样做;

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

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

  • 7

    你可以试试这个

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

    我知道这个问题适用于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);
    }),
    

    我希望它有所帮助 .

相关问题