Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
October 7, 2022 01:25 am GMT

Database Seed - MarketPlace - 2

Esta a segunda parte do artigo sobre criao de dados de forma relacional para testar mais consistentemente sua aplicao.

Na primeira parte fiz uma breve introduo sobre a proposta do projeto.

Agora vamos iniciar o desenvolvimento das migraes.

Migrao

Migraes, a grosso modo, so uma maneira de versionar o schema de um banco de dados.

Embora boa parte dos frameworks atuais possua uma forma de gerenciar migraes, ela no mandatria para o desenvolvimento de um projeto.

Alis comum vermos migraes em projetos que esto comeando, por se enquadrarem mais facilmente em metodologias e boas prticas de desenvolvimento.

Entretanto isso no significa que projetos legados no possam ter o schema versionado. Ocorre que nestes casos (projetos legados) h pouca ou s vezes nenhuma documentao disponvel sobre o projeto, dificultando significativamente esta tarefa.

Projeto

O projeto proposto para esta srie de artigos ser uma aplicao Laravel. Por essa razo, vou presumir que voc, leitor, j tenha conhecimento prvio nesse framework.

Caso este no seja o seu cenrio, sugiro dar uma lida neste artigo onde explico como configurar a conexo com um banco de dados, alm de outros detalhes.

Abra o terminal de sua preferncia e acesse a pasta onde o projeto ser criado.

A partir desta pasta digite o seguinte:

composer create-project laravel/laravel fake-data

O tempo para concluso desta tarefa varia de acordo com a configurao da mquina e a conexo com a internet.

Concluda esta etapa, ainda no terminal, acesse a pasta do projeto para criar as migraes, processo este que realizado atravs do seguinte comando:

php artisan make:migration <nome_da_migracao> [opes]

OBS.: possvel criar com um nico comando a migrao, a 'controller', o modelo e a 'factory'. Esta abordagem no ser adotada para possibilitar explicaes mais detalhadas em cada fase.

'Mo na massa'

A sequncia de criao das migraes de extrema relevncia porque sero executadas no banco de dados na ordem em que forem criadas.

Com isso em mente daremos incio criao das migraes sendo que para cada uma delas vou passar o comando que deve ser executado no terminal e logo em seguida, como a classe dever ficar.

Para alterar a classe utilize um editor de cdigo no qual voc j esteja habituado. Estou utilizando o VSCode por ser pequeno e verstil.

Customers

No terminal, dentro do diretrio raiz da aplicao, digite o seguinte:

php artisan make:migration create_customers_table

Assim que o comando for concludo, voc notar que um novo arquivo foi adicionado pasta \database\migrations. O nome desse arquivo composto pelo ano, ms, dia, hora, minuto e segundo da sua criao, seguido pelo nome que demos no comando informado no terminal.

Essa padronizao garante que cada migrao tenha um nome nico e servir de ndice quando as tabelas forem criadas no banco de dados.

Portanto, no se preocupe se os nomes dos arquivos ficarem diferentes daqueles que listarei a seguir.

Quando criei a migrao o arquivo recebeu este nome:
2022_09_29_215131_create_customers_table.php

E o caminho completo dentro da aplicao ficou assim:
\database\migrations\2022_09_29_215131_create_customers_table.php

Edite o arquivo substituindo todo contedo pelo listado a seguir:

<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('customers', function (Blueprint $table) {            $table->id();            $table->foreignId('user_id')->constrained();            $table->string('last_name');            $table->string('first_name');            $table->string('email')->nullable();            $table->string('phone', 30)->nullable();            $table->string('street');            $table->string('city');            $table->string('building_number', 30);            $table->string('country');            $table->string('post_code');        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('customers');    }};

Shops

Repetindo os passos executados na criao da migrao anterior...

php artisan make:migration create_shops_table

...obtemos um novo arquivo que, no meu caso, ser este:

\database\migrations\2022_09_29_215237_create_shops_table.php

Agora vamos edit-lo, substituindo o contedo pelo mostrado logo abaixo:

<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('shops', function (Blueprint $table) {            $table->id();            $table->foreignId('user_id')->constrained();            $table->string('name');            $table->string('email');            $table->string('address');        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('shops');    }};

Produtcs

Novamente no terminal, digitaremos o seguinte comando:

php artisan make:migration create_products_table

No meu caso, o arquivo ter este nome...

\database\migrations\2022_09_29_215336_create_products_table.php

...e o contedo substitudo pelo mostrado a seguir:

<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('products', function (Blueprint $table) {            $table->id();            $table->timestamps();            $table->foreignId('shop_id')->constrained();            $table->string('description');            $table->decimal('price', 8, 2);        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('products');    }};

Invoices

Mais uma vez no terminal...

php artisan make:migration create_invoices_table

...gerando este arquivo...

\database\migrations\2022_09_29_215415_create_invoices_table.php

...e como deve ficar seu contedo:

<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('invoices', function (Blueprint $table) {            $table->id();            $table->date('issue_date');            $table->foreignId('customer_id')->constrained();            $table->foreignId('shop_id')->constrained();            $table->string('delivery_address');            $table->string('delivery_city');            $table->string('delivery_country');            $table->string('delivery_post_code');        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('invoices');    }};

Invoice items

Por fim, a ltima migrao...

php artisan make:migration create_invoice_items_table

...recebendo este nome de arquivo...

\database\migrations\2022_09_29_215449_create_invoice_items_table.php

...e este contedo:

<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('invoice_items', function (Blueprint $table) {            $table->id();            $table->foreignId('invoice_id')->constrained();            $table->foreignId('product_id')->constrained();            $table->smallInteger('amount');            $table->decimal('value', 8, 2);            $table->decimal('tax', 8, 2);        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('invoice_items');    }};

Concluso

Nesta parte do artigo criamos as migraes implementando o relacionamento entre as tabelas, que foi feito atravs da instruo $table->foreignId('<coluna>')->constrained();.

Para efeitos didticos, vou exemplificar o relacionamento que existe entre a loja e um produto.

Primeiro, criamos uma chave primria na tabela de lojas com o comando $table->id();.

Em seguida, criamos a chave estrangeira na tabela de produtos com o comando $table->foreignId('shop_id')->constrained();.

Ao executarmos a migrao, o Laravel se encarregar de criar os relacionamentos corretamente no banco de dados configurado.

Fcil, no?!

Por enquanto isso.

At a prxima parte.


Original Link: https://dev.to/marciopolicarpo/database-seed-marketplace-2-1bdk

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To