Laravel Eloquent 如何创建具有重复 NULL 的 UNIQUE 约束

Laravel Eloquent how to create UNIQUE constraint with duplicate NULLs(Laravel Eloquent 如何创建具有重复 NULL 的 UNIQUE 约束)
本文介绍了Laravel Eloquent 如何创建具有重复 NULL 的 UNIQUE 约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是带有 MS Sql Server 2014 的 Laravel 5.我想创建一个唯一约束,但它应该允许多个空值.

I'm usinq Laravel 5 with MS Sql Server 2014. I want to create a unique constraint but it should allow multiple null values.

这是我正在使用的代码.如果 'passport_no' 不为空,则必须是唯一的.

Here is code I'm using. Where 'passport_no' has to be unique if not 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');
});

推荐答案

这是一个古老的问题,但仍然需要回答.如上所述,2008 年的 SQL Server(包括 Azure SQL)支持可以解决它的特殊索引.在您的数据库迁移过程中,您可以检查所使用的驱动程序并将数据库构建器标准 SQL 替换为特定于 MSSQL 的语句.

This is an ancient question, but sill needs answering. As stated above, SQL Server from 2008, including Azure SQL, supports a special index that will work around it. In your database migration you can check the driver used and substitute the database builder standard SQL with an MSSQL-specific statement.

此迁移示例适用于 Laravel 5+,并创建一个具有唯一但可为空的 api_token 列的用户表:

This migration example is for Laravel 5+, and creates a users table with a unique, but nullable, api_token column:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->timestamps();

        $table->string('name', 100)->nullable()->default(null);
        // etc.

        $table->string('api_token', 80)->nullable()->default(null);

        if (DB::getDriverName() !== 'sqlsrv') {
            $table->unique('api_token', 'users_api_token_unique');
        }
    });

    if (DB::getDriverName() === 'sqlsrv') {
        DB::statement('CREATE UNIQUE INDEX users_api_token_unique'
           . ' ON users (api_token)'
           . ' WHERE api_token IS NOT NULL');
    }
}

这篇关于Laravel Eloquent 如何创建具有重复 NULL 的 UNIQUE 约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)