是否可以在laravel ORM上添加tinyInteger或smallInteger来递增?

时间:2013-10-31 16:23:31

标签: php orm laravel laravel-4 eloquent

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

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

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

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

因为增量只有整数或bigInteger

选项

3 个答案:

答案 0 :(得分:11)

您可以使用以下内容:

$table->tinyInteger('id')->unsigned()->autoIncrement();

答案 1 :(得分: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);
    }

<强>2º

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

打开: MySqlGrammar.php

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

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

<强> 3°

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

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

更改为:

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

如果有人知道如何扩展此文件并在laravel中配置使用情况,并希望分享该方法,我会apreciate。但我不知道在扩展这些文件之后如何配置everthing,这就是我知道如何在laravel中执行此操作的方式。

答案 2 :(得分: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 ,即可获得无符号autoIncrement not null主键。