Laravel/Lumen 迁移:如何创建永久大写列?

Laravel/Lumen migrations: How to create a permanent uppercase column?

我的 Laravel 迁移如下所示:

class CreateTableLanguage extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('language', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
            $table->char('iso639_1',2)->unique()->comment('http://www.loc.gov/standards/iso639-2/php/code_list.php');
            $table->char('locale',2)->uppercase();  // DUMMY uppercase(), does not work
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('language');
    }
}

在 SQL 中,我可以使用以下语句强制列的内容为大写:

UPDATE
  MyTable
SET
  MyColumn = UPPER(MyColumn)

如何将大写应用于我的 Laravel 迁移 class?

在 Laravel 中,您也可以使用 Mutator

强制内容为大写
public function setLocaleAttribute($value)
{
    $this->attributes['locale'] = strtoupper($value);
}

这样,当您尝试使用 Laravel 修改该字段时,您将以大写形式存储该值

$language->locale = 'es'; // this will be 'ES'
$language->save();

为了补充该行为,如果您想确保始终以大写形式获取值,以防其他人手动或使用自定义代码添加记录,您可以创建一个访问器

public function getLocaleAttribute($value)
{
    return strtoupper($value);
}