【发布时间】:2021-08-16 13:07:53
【问题描述】:
我正在使用带有 MS Sql Server 2014 的 Laravel 5。 我想创建一个唯一约束,但它应该允许多个空值。
这是我正在使用的代码。 'passport_no' 必须是唯一的,如果不是 null。
Schema::create('UserProfile', function(Blueprint $table){
$table->increments('userprofile_id');
$table->integer('user_id')->unsigned();
$table->string('passport_no', 50)->unique()->nullable();
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
});
【问题讨论】:
-
据我所知,MS SQL-Server 不支持开箱即用,但是,从 2008 版开始,您似乎可以work around it。所以您可以手动设置它
DB::raw(...);在您的迁移中的up()函数中。 -
我不知道 Laravel 框架是否直接支持过滤索引,但是在 T-SQL 中,你可以创建一个唯一的过滤索引:
CREATE INDEX UQ_UserProfile_passport_no ON dbo.UserProfile(passport_no) WHERE passport_no IS NOT NULL。您还可以使用“WHERE passport_no IS NOT NULL”在表上创建一个视图,并在该视图上创建一个唯一索引。
标签: sql-server eloquent laravel-5