Добавить тип столбца varchar с SQL Server, используя Laravel - PullRequest
0 голосов
/ 26 января 2019

Я использую Laravel 5.7 вместе с SQL Server 2017 и хочу создать столбец varchar(50) с именем name.

Выполнение этого кода дает мне nvarchar(50) вместо:

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

Как я могу различить создание поля varchar или nvarchar?

1 Ответ

0 голосов
/ 26 января 2019

Это выстрел в темноте, поскольку у меня нет SQL Server для тестирования.Но в основном вы можете просто расширить классы Blueprint и SqlServerGrammar и добавить свои собственные типы столбцов.Пожалуйста, проверьте и дайте мне знать.:)

Создайте папку с именем Schemas, внутри этой папки создайте папки Blueprints и Grammars.Внутри них создайте свои классы PHP:

Schemas file structure

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)
    });
}
...