Laravel Schema ha un comando per ENUM equivalente alla tabella. Qual è il SET equivalente al tavolo?Qual è il tipo di dati MySQL SET equivalente in Laravel Schema?
risposta
A partire da ora laravel Schema Builder non supporta tipo di dati per le colonne SET. Quindi, ecco una soluzione alternativa fino a quando qualcuno non aggiungerà quel codice a Laravel.
Passaggio 1: Creare la tabella, utilizzare ENUM anziché 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();
});
Ora modificare ENUM su SET.
$table_prefix = DB::getTablePrefix();
DB::statement("ALTER TABLE `" . $table_prefix . "schools` CHANGE `level` `level` SET('Preschool','Kindergarten','Primary','Secondary');");
Se si dispone di una soluzione migliore, quindi fatemelo sapere.
In base all'API Laravel, non penso sia possibile creare un set utilizzando Schema Builder.
Fonte
: http://laravel.com/api/class-Illuminate.Database.Schema.Blueprint.htmlFase 1. Estendere classi di default (aggiungere il codice al tuo file di migrazione dopo use
sezioni):
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)."')";
}
}
Fase 2. Poi, abbiamo bisogno di cambiare lezioni di grammatica e blueprint di default al nostro personalizzato:
// 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);
});
Questo metodo funziona anche dopo composer update
, perché non abbiamo editato alcun codice del framework.
Ho ricevuto un errore quando lo faccio. 'L'argomento 1 passato a CreateTableName :: {closure}() deve essere un'istanza di ExtendedBlueprint, istanza di Illuminate \ Database \ Schema \ Blueprint fornita. Qualche idea? Ho cambiato Blueprint in ExtendedBlueprint nel mio callback di creazione. – gin93r
L'ho capito. Stavo usando 'Schema :: create (...)' invece di $ schema-> create (...) – gin93r
metodo di Roman Nazarkin funziona quasi perfettamente Tuttavia c'è un piccolo problema con prefissi di tabella (che questo metodo non tiene conto) è semplice ma per fare questo lavoro il suggerimento con prefissi di tabella:
$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);
});
- 1. Qual è lo schema del tratto Laravel?
- 2. Qual è il tipo di dati per unix_timestamp (MySQL)?
- 3. Qual è la migrazione di Rails equivalente al "doppio" tipo di dati di MySQL?
- 4. Qual è il miglior tipo di dati MYSQL o Maria DB per memorizzare il token JWT?
- 5. qual è la query equivalente in mysql?
- 6. Qual è il tipo di dati "atom"?
- 7. Qual è il tipo di ritorno di SUM() in mysql?
- 8. SQL Server equivalente al tipo di dati enum MySQL?
- 9. Qual è il tipo di dati "breve" in C?
- 10. Qual è il tipo di dati ideale per memorizzare l'indirizzo IP in una tabella mysql?
- 11. cosa è equivalente al tipo di dati lunghi in postgresql?
- 12. MySQL YEAR() equivalente in laravel generatore di query
- 13. Il tipo di schema astratto è sconosciuto
- 14. Come ottenere il tipo di dati char da mysql utilizzando il set di risultati
- 15. Qual è il tipo di dati di una costante definita?
- 16. Set di dati fortemente tipizzati e modifiche dello schema
- 17. Tipo di dati DECIMAL MySQL
- 18. Qual è la differenza tra schema e dizionario dati?
- 19. Che tipo di fascicolazione è la migliore per il tipo di dati INT in MySQL?
- 20. Qual è il tipo di dati dell'utente facebook
- 21. qual è il tipo di dati senza segno?
- 22. Come inserire dati grezzi nel database mysql in laravel
- 23. laravel Hash equivalente in core di PHP
- 24. Aggiornamento schema tabella senza influenzare i dati in Laravel
- 25. Qual è lo scopo dei set di dati?
- 26. Qual è la struttura dati dietro i set di Clojure?
- 27. Qual è lo schema di progettazione "Dispatcher"?
- 28. Qual è il tipo di reso di View :: make in Laravel?
- 29. qual è il C# equivalente di Iterator in Java
- 30. Qual è l'equivalente di REGEXP_SUBSTR in mysql?
Ha funzionato per me! – markdwhite
Perché non aggiungere semplicemente la tabella in seguito (usando una chiamata 'DB :: statement')? Perché lo aggiungi, quindi lo altera? – ajon
@ ajon Buona domanda. Ho fatto così per mantenere l'uso di 'DB :: statement' al minimo. – Debiprasad