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