4

是否可以将该代码或类似的代码添加到laravel\Illuminate\Database\Schema\Blueprint以用于迁移?

public function incrementsTiny($column)
{
   return $this->unsignedTinyInteger($column, true);
}

public function incrementsSmall($column)
{
   return $this->unsignedSmallInteger($column, true);
}

场景:一些临时表不会长高并且有一些有用的信息,或者只是不超过 100 行的小表并且需要一些罕见的更新(添加或只是更改)。但是可以添加到框架中吗?有很多信息是很常见的,但有时有些表格没有很多数据。

因为对于增量,只有 integer 或 bigInteger 的选项

4

3 回答 3

13

你可以使用类似的东西:

$table->tinyInteger('id')->unsigned()->autoIncrement();
于 2015-06-10T16:04:47.460 回答
0

导航到:laravel/vendor/laravel/framework/src/Illuminate/Database/Schema

打开:Blueprint.php

寻找:

public function increments($column)
    {
        return $this->unsignedInteger($column, true);
    }

在此之后添加:

     /**
     * Create a new auto-incrementing tiny integer column on the table.
     *
     * @param  string  $column
     * @return \Illuminate\Support\Fluent
     */
    public function incrementsTinyInteger($column)
    {
        return $this->unsignedTinyInteger($column, true);
    }

    /**
     * Create a new auto-incrementing small integer column on the table.
     *
     * @param  string  $column
     * @return \Illuminate\Support\Fluent
     */
    public function incrementsSmallInteger($column)
    {
        return $this->unsignedSmallInteger($column, true);
    }

    /**
     * Create a new auto-incrementing medium integer column on the table.
     *
     * @param  string  $column
     * @return \Illuminate\Support\Fluent
     */
    public function incrementsMediumInteger($column)
    {
        return $this->unsignedMediumInteger($column, true);
    }

寻找:

public function unsignedInteger($column, $autoIncrement = false)
    {
        return $this->integer($column, $autoIncrement, true);
    }

在此之后添加:

     /**
     * Create a new unsigned tiny integer column on the table.
     *
     * @param  string  $column
     * @param  bool  $autoIncrement
     * @param  bool  $unsigned
     * @return \Illuminate\Support\Fluent
     */
    public function unsignedTinyInteger($column, $autoIncrement = false)
    {
        return $this->tinyInteger($column, $autoIncrement, true);
    }

    /**
     * Create a new unsigned small integer column on the table.
     *
     * @param  string  $column
     * @param  bool  $autoIncrement
     * @param  bool  $unsigned
     * @return \Illuminate\Support\Fluent
     */
    public function unsignedSmallInteger($column, $autoIncrement = false)
    {
        return $this->smallInteger($column, $autoIncrement, true);
    }

    /**
     * Create a new unsigned medium integer column on the table.
     *
     * @param  string  $column
     * @param  bool  $autoIncrement
     * @param  bool  $unsigned
     * @return \Illuminate\Support\Fluent
     */
    public function unsignedMediumInteger($column, $autoIncrement = false)
    {
        return $this->mediumInteger($column, $autoIncrement, true);
    }

导航到:laravel/vendor/laravel/framework/src/Illuminate/Database/Schema/ Grammars

打开:MySqlGrammar.php

寻找:protected $serials = array('bigInteger', 'integer');

改成:protected $serials = array('bigInteger', 'integer', 'tinyInteger', 'smallInteger', 'mediumInteger');

另外,在上面的同一个文件中,找到:

protected function typeTinyInteger(Fluent $column)
    {
        return 'tinyint(1)';
    }

改成:

protected function typeTinyInteger(Fluent $column)
    {
        return 'tinyint';
    }

如果有人知道如何扩展此文件并在 laravel 中配置用法,并想分享操作方法,我将不胜感激。但我不知道如何在扩展这些文件后配置一切,这就是我知道如何在 laravel 中执行此操作的方式。

于 2013-11-01T14:37:47.083 回答
0
$table->tinyInteger('id', true, true);

您可以在 Illuminate\Database\Schema\Blueprint.php 中看到 tinyInteger 函数定义:

/**
 * Create a new tiny integer (1-byte) column on the table.
 *
 * @param  string  $column
 * @param  bool  $autoIncrement
 * @param  bool  $unsigned
 * @return \Illuminate\Support\Fluent
 */
public function tinyInteger($column, $autoIncrement = false, $unsigned = false)
{
    return $this->addColumn('tinyInteger', $column, compact('autoIncrement', 'unsigned'));
}

因此,您只需将第二个和第三个参数设置为true,您就会得到 unsigned autoIncrement not null 主键。

于 2017-09-06T17:04:04.383 回答