Что такое эквивалент STAT в формате Larvel?

Laravel Schema имеет команду для ENUM, эквивалентную таблице. Что такое SET, эквивалентное таблице?

    Шаг 1. Расширение классов по умолчанию (добавьте этот код в файл миграции после use ):

     class ExtendedBlueprint extends Blueprint { /** * Create a new set column on the table. * * @param string $column * @param array $allowed * @return \Illuminate\Support\Fluent */ public function set($column, array $allowed) { return $this->addColumn('set', $column, compact('allowed')); } } class ExtendedMySqlGrammar extends Illuminate\Database\Schema\Grammars\MySqlGrammar { /** * Create the column definition for an set type. * * @param \Illuminate\Support\Fluent $column * @return string */ protected function typeSet(\Illuminate\Support\Fluent $column) { return "set('".implode("', '", $column->allowed)."')"; } } 

    Шаг 2. Затем нам нужно поменять классы грамматики и классов по умолчанию на наш обычай:

     // 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); }); по // 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); }); 

    Этот метод также будет работать после composer update , потому что мы не редактировали никакого кода рамки.

    На данный момент Laravel Schema Builder не поддерживает тип данных SET для столбцов. Итак, вот альтернативное решение, пока кто-то не добавит этот код в Laravel.

    Шаг 1. Создайте таблицу, используйте ENUM вместо SET.

     Schema::create('schools', function($table) { $table->increments('id'); $table->char('id_number', 6); $table->string('school_name'); $table->enum('level', array('Preschool', 'Kindergarten', 'Primary', 'Secondary'))->index(); // *** fix this $table->string('phone'); $table->string('email'); $table->string('location'); $table->smallInteger('city')->unsigned()->index(); $table->smallInteger('country')->unsigned()->index(); $table->smallInteger('head_teacher')->unsigned()->index(); $table->smallInteger('director')->unsigned()->index(); $table->smallInteger('created_by')->unsigned(); $table->smallInteger('modified_by')->unsigned(); $table->timestamps(); }); 

    Теперь измените ENUM на SET.

     $table_prefix = DB::getTablePrefix(); DB::statement("ALTER TABLE `" . $table_prefix . "schools` CHANGE `level` `level` SET('Preschool','Kindergarten','Primary','Secondary');"); 

    Если у вас есть лучшее решение, пожалуйста, дайте мне знать.

    Метод Роман Назаркин работает почти идеально, однако есть небольшая проблема с префиксами таблиц (которые этот метод не учитывает), однако просто сделать это предложение работать с префиксами таблиц:

     $grammar = DB::connection()->withTablePrefix(new ExtendedMySqlGrammar()); // set new grammar class DB::connection()->setSchemaGrammar($grammar); // 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); }); по $grammar = DB::connection()->withTablePrefix(new ExtendedMySqlGrammar()); // set new grammar class DB::connection()->setSchemaGrammar($grammar); // 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); }); 

    Согласно API Laravel, я не думаю, что можно создать набор с помощью Schema Builder.

    Источник: http://laravel.com/api/class-Illuminate.Database.Schema.Blueprint.html