2015-04-25 5 views
1

Я - usinq Laravel 5 с сервером MS Sql 2014. Я хочу создать уникальное ограничение, но оно должно допускать несколько нулевых значений.Laravel Eloquent как создать УНИКАЛЬНОЕ ограничение с дублирующимися NULL

Вот код, который я использую. Где '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'); 
}); 
+0

Насколько я знаю, MS SQL-сервер делает не поддерживайте это из коробки, однако похоже, что вы можете [обойти это] (http://sqlmag.com/sql-server-2008/unique-constraint-multiple-nulls) с версии 2008. Таким образом, вы можете возможно, просто установите его вручную с помощью функции DB: raw (...); 'в' up() '-функции в вашей миграции. – Quasdunk

+1

Я не знаю, поддерживает ли структура Laravel только фильтрованные индексы напрямую, но в T-SQL, вы можете создать уникальный отфильтрованный индекс: 'CREATE INDEX UQ_UserProfile_passport_no ON dbo.UserProfile (паспорт_no) WHERE passport_no IS NOT NULL'. Вы также можете создать представление в таблице с «WHERE passport_no IS NOT NULL» и создать уникальный индекс в представлении. –

ответ

0

вы можете использовать уникальный индекс и в фильтре установить условие, как

passport_no is not null 

таким образом, вы можете решить вашу проблему

Смежные вопросы