【问题标题】:Add varchar column type with SQL Server using Laravel使用 Laravel 在 SQL Server 中添加 varchar 列类型
【发布时间】:2019-06-19 23:18:12
【问题描述】:

我正在使用 Laravel 5.7 和 SQL Server 2017,我想生成一个名为 namevarchar(50) 列。

执行此代码会给我一个nvarchar(50)

Schema::create('test', function(Blueprint $table) {
    $table->string('name', 50);
});

如何区分创建varcharnvarchar 字段?

【问题讨论】:

  • 我刚刚查看了代码,乍一看似乎没有简单的方法可以做到这一点,但是,我确实找到了这个答案,可能是有帮助的stackoverflow.com/questions/41068951/…。本质上,要自己动手,您必须重写一些安静的 DB 类,以允许使用自定义 SqlServerGrammar 类。
  • 更新了我的答案,请测试并告诉我们。如果它不起作用,我将删除答案并等待更好的答案。 :)

标签: laravel laravel-5.7 nvarchar laravel-migrations laravel-schema-builder


【解决方案1】:

这是在黑暗中拍摄的,因为我没有要测试的 SQL Server。但基本上你可以扩展BlueprintSqlServerGrammar 类并添加你自己的列类型。请测试并告诉我。 :)

app 文件夹下创建一个名为Schemas 的文件夹,然后在Schemas 文件夹下创建文件夹BlueprintsGrammars。在其中创建您的 PHP 类:

CustomBlueprint.php

<?php

namespace App\Schemas\Blueprints;

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Schema\Builder;

class CustomBlueprint extends Blueprint
{
    public function varChar($column, $length = null)
    {
        $length = $length ? : Builder::$defaultStringLength;

        return $this->addColumn('varChar', $column, compact('length'));
    }
}

CustomGrammar.php

<?php

namespace App\Schemas\Grammars;

use Illuminate\Database\Schema\Grammars\SqlServerGrammar;
use Illuminate\Support\Fluent;

class CustomGrammar extends SqlServerGrammar
{
    protected function typeVarChar(Fluent $column)
    {
        return "varchar({$column->length})";
    }
}

您的迁移文件:

public function up()
{
    DB::connection()->setSchemaGrammar(new CustomGrammar());

    $schema = DB::connection()->getSchemaBuilder();

    $schema->blueprintResolver(function($table, $callback) {
        return new CustomBlueprint($table, $callback);
    });

    $schema->create('test', function (CustomBlueprint $table) {
        $table->string('name', 50);  // <-- nvarchar(50)
        // or
        $table->varChar('name', 50); // <-- varchar(50)
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多