Добавить тип столбца varchar с SQL Server, используя Laravel
Я использую Laravel 5.7 вместе с SQL Server 2017, и я хочу сгенерировать varchar(50)
колонка называется name
,
Выполнение этого кода дает мне nvarchar(50)
вместо:
Schema::create('test', function(Blueprint $table) {
$table->string('name', 50);
});
Как я могу дифференцировать создание varchar
или же nvarchar
поле?
1 ответ
Решение
Это выстрел в темноте, так как у меня нет SQL Server для тестирования. Но в основном вы можете просто продлить Blueprint
а также SqlServerGrammar
классы и добавить свои собственные типы столбцов. Пожалуйста, проверьте и дайте мне знать.:)
Создайте папку с именем Schemas
внутри этой папки создайте папки Blueprints
а также Grammars
, Внутри них создайте свои классы 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)
});
}