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

时间:2013-06-07 18:32:15

标签: laravel laravel-4

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

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

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

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

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

谢谢,

迪特

5 个答案:

答案 0 :(得分:77)

你可以结合使用:

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

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:3)

您也可以这样做;

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

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

答案 3 :(得分:0)

你可以试试这个

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

答案 4 :(得分:0)

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

我希望它有所帮助。