Step 1. Extend default classes(add this code to your migration file after use
sections):
class ExtendedBlueprint extends Blueprint {
/**
* Create a new set column on the table.
*
* @param string $column
* @param array $allowed
* @return IlluminateSupportFluent
*/
public function set($column, array $allowed)
{
return $this->addColumn('set', $column, compact('allowed'));
}
}
class ExtendedMySqlGrammar extends IlluminateDatabaseSchemaGrammarsMySqlGrammar {
/**
* Create the column definition for an set type.
*
* @param IlluminateSupportFluent $column
* @return string
*/
protected function typeSet(IlluminateSupportFluent $column)
{
return "set('".implode("', '", $column->allowed)."')";
}
}
Step 2. Then, we need to change default grammar and blueprint classes to our custom:
// set new grammar class
DB::connection()->setSchemaGrammar(new ExtendedMySqlGrammar());
// get custom schema object
$schema = DB::connection()->getSchemaBuilder();
// bind new blueprint class
$schema->blueprintResolver(function($table, $callback) {
return new ExtendedBlueprint($table, $callback);
});
// then create tables
$schema->create('table name', function(ExtendedBlueprint $table)
{
$table->increments('id');
$table->text('sentence');
$table->string('author')->nullable();
$table->string('source')->nullable();
$table->set('difficulty', range(1, 10)); // use our new mysql type
$table->boolean('enabled')->default(true);
});
This method will also work after composer update
, because we did not edited any framework code.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…