Zpět na kurz

Lekce 4: Databáze, modely a Eloquent ORM

Vítejte u čtvrté lekce, ve které se ponoříme do světa databází a nejvýkonnějšího nástroje v Laravelu – Eloquent ORM. Naučíte se, jak nastavit a spravovat databázi, definovat modely a provádět CRUD (Create, Read, Update, Delete) operace s elegantní syntaxí. Tato lekce je klíčová pro vývoj jakékoli dynamické webové aplikace. [Image of database schema]

Obsah lekce


Nastavení DB v .env

Než začnete pracovat s databází, je nutné nastavit její připojení. Veškerá konfigurace se nachází v souboru .env v kořenovém adresáři vašeho projektu.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=moje_aplikace
DB_USERNAME=root
DB_PASSWORD=

Vytvoření a spuštění migrace

Migrace jsou jako "verze" vaší databáze. Umožňují vám definovat strukturu tabulek pomocí PHP kódu, což zjednodušuje týmovou spolupráci a nasazování na server.

Vytvoření migrace pro tabulku products:

php artisan make:migration create_products_table

Otevřete nově vytvořený soubor a definujte sloupce:

// database/migrations/..._create_products_table.php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->decimal('price', 8, 2);
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

Spuštění migrace:

php artisan migrate

Definice modelu Product a Eloquent

Model je třída, která reprezentuje jednu databázovou tabulku a umožňuje s ní interagovat pomocí objektů. Díky Eloquent ORM můžete pracovat s tabulkami jako s objekty.

Vytvoření modelu Product:

php artisan make:model Product

Model se automaticky vytvoří v app/Models/Product.php.

CRUD operace pomocí Eloquentu

Eloquent výrazně zjednodušuje základní operace s daty.

Vytvoření (Create):

$product = Product::create([
    'name' => 'Káva',
    'price' => 120.50,
    'description' => 'Výběrová káva z Brazílie'
]);

Čtení (Read):

$product = Product::find(1); // Najde produkt s ID 1
$products = Product::where('price', '>', 100)->get(); // Všechny produkty dražší než 100

Aktualizace (Update):

$product = Product::find(1);
$product->price = 150;
$product->save();

Smazání (Delete):

$product = Product::find(1);
$product->delete();

Vytvoření seederu a Factory

Pro naplnění databáze testovacími daty se používají seedery a Factory. Factory definují, jaká data se mají generovat, a seedery je pak vkládají do databáze.

Vytvoření seederu a factory:

php artisan make:seeder ProductSeeder
php artisan make:factory ProductFactory

Upravte ProductFactory pro generování dat.

// database/factories/ProductFactory.php
public function definition(): array
{
    return [
        'name' => $this->faker->words(2, true),
        'price' => $this->faker->randomFloat(2, 50, 500),
        'description' => $this->faker->paragraph,
    ];
}

Upravte ProductSeeder pro použití factory a naplnění databáze.

// database/seeders/ProductSeeder.php
use App\Models\Product;
use Illuminate\Database\Seeder;

class ProductSeeder extends Seeder
{
    public function run(): void
    {
        Product::factory()->count(10)->create();
    }
}

Naplnění DB testovacími daty:

php artisan db:seed --class=ProductSeeder

Observers pro automatické akce

Observers vám umožní provádět akce, když dojde ke změnám modelu, například při vytvoření, aktualizaci nebo smazání. Jsou to skvělé nástroje pro zachycení událostí a automatizaci procesů.

Vytvoření observeru pro model Product:

php artisan make:observer ProductObserver --model=Product

Příklad metody created v observeru:

// app/Observers/ProductObserver.php

public function created(Product $product): void
{
    Log::info('Nový produkt byl vytvořen: ' . $product->name);
}
  1. Nezapomeňte zaregistrovat observer v AppServiceProvider.

Shrnutí

Po této lekci žák umí nastavit databázi a vytvořit základní strukturu pro práci s daty. Rozumí tomu, jak vytvořit migrace pro definici tabulek a jak je spouštět. Zvládl základy Eloquentu, což mu umožňuje provádět všechny nezbytné CRUD operace s daty. Navíc zná seedery a factories pro efektivní generování testovacích dat a observers pro automatizaci akcí. 🎉

David Kojecký

David Kojecký

Programátor ve společnosti Codefit a vývojář pro Mobilní lékárna CZ

´