Criar Tabelas no Laravel (Migrations)

O Laravel possui um recurso chamado Migrations que permite gerenciar as tabelas do banco de dados.

Com este recurso é possível criar as tabelas, alterar a estrutura, definir a ordem de criação de cada tabela e fazer relacionamentos entre elas.

Os arquivos de migrations (estrutura das tabelas) ficam em database/migrations/
Por padrão o Laravel já traz duas migrations, você pode abrir os arquivos 2014_10_12_000000_create_users_table.php e 2014_10_12_100000_create_password_resets_table.php para ver a estrutura destas tabelas.

O arquivo de migration 2014_10_12_000000_create_users_table.php tem a estrutura padrão da tabela users (utilizada para fazer login no sistema).

O arquivo de migration 2014_10_12_100000_create_password_resets_table.php contém a estrutura da tabela password_resets, utiliza para resetar a senha do usuário.

NOTA: A ordem de criação tabelas é definida pelo nome do arquivo, ou seja, neste caso a tabela users é criada antes da tabela password_resets. O sistema de Migration do Laravel mantém a data de criação no mome do arquivo para ordenar de forma correta, sendo assim não gera erros no momento de criar uma tabela quem contém relacionamento com outra tabela.

Criar novas migrations:

Para criar uma nova Migration você pode criar o arquivo manualmente e rodar o comando composer dump-autoload para atualizar a lista de arquivos (Não recomendado!).

Ou você pode utilizar o grande aliado do desenvolvedor Laravel o artisan para criar isso para você.

Utilizando o artisan você pode criar as migrations (tabelas) de duas formas:

1php artisan make:migration create_products_table

Assim gera um arquivo de migration apenas, com um nome semelhante a isso:
database/migrations/ano_mes_dia_timestamps_create_products_table.php

Criando tabelas com nome composto:

Quando você manda assim

php artisan make:model InformationUser -m

ele faz a parte do migration corretamente colocando pela nomenclatura que você deseja que é

Schema::create('information_users ', function (Blueprint $table) {

mas, ele usa o mesmo nome com o i em minusculo:

class InformationUser extends Model

acaba a final você tendo que arrumar para InformationUser na classe.

Criando Controller:

Agora vamos falar da Controller, elas servem para agrupar toda a lógica das suas requisições em uma única classe. Você pode ver abaixo o nosso arquivo referente a CRUD de Produtos que estamos desenvolvendo, 60 linhas é relativamente grande, se deixássemos todo esse código direto nas nossas rotas seria um caos, os controllers nos ajudam a organizar nosso projeto.

php artisan make:controller NameController
<?php

namespace App\Http\Controllers;

use App\Http\Requests\ProductRequest;
use App\Product;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::orderBy('created_at', 'desc')->paginate(10);
        return view('products.index',['products' => $products]);
    }
  
    public function create()
    {
        return view('products.create');
    }
  
    public function store(ProductRequest $request)
    {
        $product = new Product;
        $product->name        = $request->name;
        $product->description = $request->description;
        $product->quantity    = $request->quantity;
        $product->price       = $request->price;
        $product->save();
        return redirect()->route('products.index')->with('message', 'Product created successfully!');
    }
  
    public function show($id)
    {
        //
    }
  
    public function edit($id)
    {
        $product = Product::findOrFail($id);
        return view('products.edit',compact('product'));
    }
  
    public function update(ProductRequest $request, $id)
    {
        $product = Product::findOrFail($id);
        $product->name        = $request->name;
        $product->description = $request->description;
        $product->quantity    = $request->quantity;
        $product->price       = $request->price;
        $product->save();
        return redirect()->route('products.index')->with('message', 'Product updated successfully!');
    }
  
    public function destroy($id)
    {
        $product = Product::findOrFail($id);
        $product->delete();
        return redirect()->route('products.index')->with('alert-success','Product hasbeen deleted!');
    }
}

Dentro da Controller você pode ver que criamos as funções referentes ao que uma CRUD deve fazer. Essas funções devem ser chamadas nas rotas como métodos da sua controller. Há duas formas de se fazer isso.

<?php
...

Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () {
    Route::get('/', '[email protected]');
    Route::get('projetos', '[email protected]');
    Route::get('projetos/inserir', '[email protected]');
    Route::post('projetos/inserir', '[email protected]');
    Route::get('projetos/editar/{id}', '[email protected]');
    Route::post('projetos/editar/{id}', '[email protected]');
    Route::post('projetos/deletar/{id}', '[email protected]');
...
});

?>