Uma 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.