39

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

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

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

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

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

谢谢,

迪特

4

5 回答 5

90

您可以组合:

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

Laravel 中的几乎所有东西都将接受数组来做任何你需要用“多个”做的事情。

于 2013-06-07T18:40:06.190 回答
9

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

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

于 2013-06-07T23:27:11.847 回答
7

你也可以这样做;

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

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

于 2018-04-13T21:16:08.257 回答
2

我知道这个问题是针对 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);
}),

我希望它有所帮助。

于 2018-02-17T17:34:59.533 回答
-4

你可以试试这个

$table->string("name");
$table->string("email")->unique("name")
于 2015-04-03T15:07:08.443 回答