使用 Laravel 添加带有 SQL 服务器的 varchar 列类型
Add varchar column type with SQL Server using Laravel
我正在使用 Laravel 5.7 和 SQL Server 2017,我想生成一个名为 name
的 varchar(50)
列。
执行此代码会得到 nvarchar(50)
:
Schema::create('test', function(Blueprint $table) {
$table->string('name', 50);
});
如何区分创建 varchar
或 nvarchar
字段?
这是在黑暗中拍摄的,因为我没有 SQL 服务器来测试。但基本上您可以扩展 Blueprint
和 SqlServerGrammar
类 并添加您自己的列类型。请测试并告诉我。 :)
在 app
文件夹下创建名为 Schemas
的文件夹,然后在 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)
});
}
我正在使用 Laravel 5.7 和 SQL Server 2017,我想生成一个名为 name
的 varchar(50)
列。
执行此代码会得到 nvarchar(50)
:
Schema::create('test', function(Blueprint $table) {
$table->string('name', 50);
});
如何区分创建 varchar
或 nvarchar
字段?
这是在黑暗中拍摄的,因为我没有 SQL 服务器来测试。但基本上您可以扩展 Blueprint
和 SqlServerGrammar
类 并添加您自己的列类型。请测试并告诉我。 :)
在 app
文件夹下创建名为 Schemas
的文件夹,然后在 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)
});
}