我正在使用Laravel 4在我的数据库中导入一堆csv条目。
我无法真正指出一个必须是唯一的列,它是5列的组合,使其独一无二。但是:如何在Laravel中定义它?
选项1:架构构建器
您可以使用$ table-> unique('email')方法,但这似乎只允许一列,而不是列的组合。
选项2:验证
不太可取,但我可以在插入之前验证模型。但是,再次使用“unique:[table]”验证规则,当其中一个列值不唯一时,它将返回错误,而不是它们的组合。
谁能告诉我应该怎么做呢? 我确定我错过了一些东西,但我可以用正确的方向推进: - )
谢谢,
迪特
答案 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);
}),
我希望它有所帮助。