Laravel 4:使值/列的组合唯一

Laravel 4:使值/列的组合唯一,laravel,laravel-4,Laravel,Laravel 4,我正在用Laravel 4在我的数据库中导入一堆csv条目 我真的不能指出一个列必须是唯一的,它是由5个列组合而成的。然而:在拉威尔如何定义这一点 选项1:schema builder 您可以使用$table->unique('email')方法,但这似乎只允许一列,而不允许列的组合 选项2:验证 不太可取,但我可以在插入模型之前验证它。但是,再次使用“unique:[table]”验证规则,当只有一个列值不是唯一的,而不是它们的组合时,它将返回一个错误 有人能告诉我该怎么做吗? 我肯定我遗漏了

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

我真的不能指出一个列必须是唯一的,它是由5个列组合而成的。然而:在拉威尔如何定义这一点

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

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

有人能告诉我该怎么做吗?
我肯定我遗漏了什么,但我可以朝正确的方向推一下:-)

谢谢

迪特尔

您可以组合:

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

Laravel中的几乎所有内容都将接受数组,以便使用“多个”执行任何需要的操作。

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

另外,如果您想在模型上使用验证,请考虑我的自定义<代码>验证器< /Cult>规则,用于多个<代码>唯一< /代码>索引:

您可以尝试这个

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

我知道这个问题是针对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);
}),
我希望有帮助。

你也可以这样做

$table->unique([“column1”、“column2”]、“uq_columns”)


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

感谢自定义验证程序规则!将在DB约束的基础上使用它,在程序流中依赖DB异常似乎是错误的。但是如何验证复合唯一键,我指的是使用laravel验证的第二部分。我无法理解laravel网站上的例子?@HariHaraSudhan是的,我想我也有相同的laravel 5.4使用相同的语法。我不理解。为什么这会使电子邮件和姓名成为独一无二的一对呢?我认为这是正确的答案。最初的帖子要求一个场景,其中两列作为一个组合必须是唯一的。因此,如本文所述,使用这两个键定义一个键。谢谢,我也在找这个。@GaryPaluk,你错了。这个答案是关于,
作为组合是唯一的
,最后一个参数是索引名。