Criando tabelas InnoDB no Laravel com Artisan e migrations
5 years ago by Jaime NetoUma das características mais interessantes do Laravel é a facilidade de criar toda a estrutura do código rapidamente utilizando a ferramenta artisan. Uma dessas funcionalidades, é a de criar tabelas diretamente no banco de dados, baseando-se em suas classes de migration.
Por padrão, o Laravel irá criar as tabelas utilizando a engine MyISAM. Ela é uma engine útil quando precisamos de alta performance, porém, ela não serve se quisermos trabalhar com relacionamentos entre as tabelas, já que não aceita chaves estrangeiras. Para isso, geralmente é usada a engine InnoDB. Precisaremos, então, mudar essa configuração para que as tabelas sejam criadas utilizando InnoDB.
Abra o arquivo config/database.php
, e procure as configurações do MySQL, que devem estar dentro de connections. Encontre a configuração de engine, e ponha o valor 'InnoDB'.
Pronto, agora podemos criar as models e as migrations para gerar as tabelas. Vá até o terminal e execute:
php artisan make:model Post -m
Será criado o model app/Post.php
. O parâmetro -m
fará com que crie também o arquivo de migration em database/migrations/Y_m_d_num_create_posts_table.php
, onde Y, m e d são ano, mês e dia em que o arquivo foi criado, e num é código criado pelo próprio Laravel para ordenar os arquivos. Altere este arquivo para adicionar os campos que deseja na tabela de posts dentro do método up()
.
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->text('text');
$table->bigInteger('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
De volta ao terminal, execute o comando para gerar a tabela (lembre-se que a chave estrangeira só irá funcionar se a tabela users já estiver criada, ou se já tiver uma migration para ele que seja executada primeiro):
php artisan migrate
A tabela posts já deve ter sido criada. Confira se a engine dela é InnoDB, como esperado.