我将如何覆盖 Laravel 5.3 sql 语法

How would I override Laravel 5.3 sql grammar

如何设置 Laravel 5.3 以在 mssql 上使用 VARCHAR 而不是 NVARCHAR 进行迁移?甚至有办法做到这一点吗?

这个问题也适用于 DATETIME 上的 SMALLDATETIME。

这是可行的,但您可能必须自己创建一个新的数据库驱动程序,这涉及创建

DatabaseManager
Connection
ConnectionFactory
Schema Builder
Schema Grammar
...

好的部分是你可能可以扩展所有那些来自 Laravel 的人并且只改变语法 class:

 /**
  * Create the column definition for a string type.
  *
  * @param  \Illuminate\Support\Fluent  $column
  * @return string
  */
 protected function typeString(Fluent $column)
 {
   return 'NVARCHAR ('.$column->length.')';
 }

此包中的示例:

https://github.com/jacquestvanzuydam/laravel-firebird/tree/5.3-support/src/Firebird

我创建了一个包,让您可以进行自定义迁移,而无需自己扩展所有内容。

https://github.com/shiftonelabs/laravel-nomad

安装包后,您只需将迁移更改为使用新的 passthru 方法,然后您可以为其字段提供所需的定义。

// pass definition as third parameter
$table->passthru('string', 'username', 'varchar(60)');
$table->passthru('datetime', 'expires_at', 'smalldatetime');

// or use fluent definition method
$table->passthru('string', 'username')->definition('varchar(60)');
$table->passthru('datetime', 'expires_at')->definition('smalldatetime');

// if there is no defintion, it defaults to the first parameter
$table->passthru('smalldatetime', 'expires_at');